Экспорт из DataTable в Excel с помощью C#

Сегодня небольшая заметка о том, как полученные данные записанные в 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);
            }
        }

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *