Сегодня небольшая заметка о том, как полученные данные записанные в DataTable экспортировать в Microsoft Excel. Воспользуемся сторонней библиотекой ExcelLibrary. Для начала скачиваем ExcelLibrary и прикрепляем ссылку на библиотеку DLL. Напишем небольшой класс, либо просто метод:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
using ExcelLibrary.SpreadSheet; class Export2ExcelClass { //export Excel from DataSet public static void CreateWorkbook(String filePath, DataSet dataset) { if (dataset.Tables.Count == 0) throw new ArgumentException("DataSet needs to have at least one DataTable", "dataset"); Workbook workbook = new Workbook(); foreach (DataTable dt in dataset.Tables) { Worksheet worksheet = new Worksheet(dt.TableName); for (int i = 0; i < dt.Columns.Count; i++) { // Add column header worksheet.Cells[0, i] = new Cell(dt.Columns[i].ColumnName); // Populate row data for (int j = 0; j < dt.Rows.Count; j++) //Если нулевые значения, заменяем на пустые строки worksheet.Cells[j + 1, i] = new Cell(dt.Rows[j][i] == DBNull.Value ? "" : dt.Rows[j][i]); } workbook.Worksheets.Add(worksheet); } workbook.Save(filePath); } //******************************** // DataGridView to DataTable public static DataTable ToDataTable(DataGridView dataGridView, string tableName) { DataGridView dgv = dataGridView; DataTable table = new DataTable(tableName); int iCol = 0; for (iCol = 0; iCol < dgv.Columns.Count; iCol++) { table.Columns.Add(dgv.Columns[iCol].Name); } foreach (DataGridViewRow row in dgv.Rows) { DataRow datarw = table.NewRow(); for (iCol = 0; iCol < dgv.Columns.Count; iCol++) { datarw[iCol] = row.Cells[iCol].Value; } table.Rows.Add(datarw); } return table; } } |
Вызов метода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
private void toolStripButton2_Click(object sender, EventArgs e) { var ds = new DataSet(); var dt = new DataTable(); //Получаем из dt = Export2ExcelClass.ToDataTable(dataGridView1, "PC"); //Записываем в Dataset нашу полученную таблицу ds.Tables.Add(dt); var save = new SaveFileDialog(); save.Filter = "xls files (*.xls)|*.xls|All files|*.*"; if (save.ShowDialog() == DialogResult.OK) { //Собсвенно вот тут и передаем DataSet в наш метод который формирует Excel-документ Export2ExcelClass.CreateWorkbook(save.FileName, ds); } } |