[英]How to create excel file with multiple sheets from DataGridView using C#
[英]Create an Excel File from a dataGridView
我在 WindowsForms 中有一个 dataGridView。 我想要一个按钮来将此 dataGridView 导出到 Excel 工作表。
using Excel = Microsoft.Office.Interop.Excel;
Excel.Application ExcelApp;
Excel.Workbook ExcelWorkBook;
Excel.Worksheet ExcelWorkSheet;
ExcelApp = new Excel.Application();
ExcelWorkBook = ExcelApp.Workbooks.Add(Missing.Value);
ExcelWorkSheet = (Excel.Worksheet)ExcelWorkBook.Worksheets.get_Item(1);
try
{
for (int i = 0; i <= dataGridView1.RowCount - 1; ++i)
{
for (int j = 0; j <= dataGridView1.ColumnCount - 1; ++j)
{
DataGridViewCell cell = dataGridView1[j, i];
ExcelWorkSheet.Cells[i + 1, j + 1] = cell.Value;
}
}
} catch (Exception ex) { /*somestuff*/ }
// save ExcelWorkbook
此代码有效。 但不幸的是,时间复杂度很差。 所以我不得不实现一个进度条。 如果我不这样做,用户会在导出大数据网格视图时认为程序崩溃了。 不用说,这当然会进一步减缓出口。 (此问题中不包含进度条代码)
我想知道,是否有一种方法可以更快地将数据网格导出到 Excel。
感谢您提供使用另一个第三方库的提示。 我给了 EPPLus 一个机会。
这是代码:
private void ExportWithEPPlus(string filepath)
{
using (ExcelPackage excelPackage = new ExcelPackage())
{
ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("Sheet 1");
try
{
for (int i = 0; i <= dataGridView1.RowCount - 1; ++i)
{
for (int j = 0; j <= dataGridView1.ColumnCount - 1; ++j)
{
DataGridViewCell cell = dataGridView1[j, i];
worksheet.Cells[i + 1, j + 1].Value = cell.Value;
}
}
catch (Exception ex) { /*somestuff*/ }
finally
{
FileInfo fi = new FileInfo(@filepath);
excelPackage.SaveAs(fi);
}
}
}
它快得像地狱一样。 缺点是:它很耗内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.