繁体   English   中英

从 dataGridView 创建 Excel 文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM