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

Сегодня небольшая заметка о том, как полученные данные записанные в DataTable экспортировать в Microsoft Excel. Воспользуемся сторонней библиотекой ExcelLibrary. Для начала скачиваем ExcelLibrary и прикрепляем ссылку на библиотеку DLL. Напишем небольшой класс, либо просто метод:

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;
        } 

    }

Вызов метода:

 
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);
            }
        }

Добавить комментарий

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