【问题标题】:Writing large object into excel is taking hell out of time. Any way to fix this?将大型对象写入 excel 会占用大量时间。有任何解决这个问题的方法吗?
【发布时间】:2020-04-25 23:57:24
【问题描述】:

我有一个预定义格式的 excel 文件,并且正在将我的对象写入该 excel 中,这需要花费大量时间并且应用程序将进入陈旧模式。

我正在使用 EpPlus 库。

请找到下面的代码,如果我可以让事情变得更好,请告诉我。

    FileInfo fileInfo = new FileInfo(xslxpath);
    using (ExcelPackage excelPackage = new ExcelPackage(fileInfo))
    {
      int excelRow = 2;
      ExcelWorksheet worksheet1 = excelPackage.Workbook.Worksheets.First();
      foreach (var rows in objDetails)
      {
        worksheet1.Cells[excelRow, 1].Value = rows.ID.ToString();
        worksheet1.Cells[excelRow, 2].Value = rows.Name.ToString();
        worksheet1.Cells[excelRow, 3].Value = rows.Days.ToString();
        worksheet1.Cells[excelRow, 4].Value = rows.Amount.ToString();
        worksheet1.Cells[excelRow, 5].Value = rows.Reason.ToString();
        WriteToLogFile(LogFile, excelRow.ToString() + " " + rows.IPNumber.ToString());

        worksheet1.Cells.AutoFitColumns();
        excelRow++;
        WriteToLogFile(LogFile, excelRow.ToString() + " " + rows.IPNumber.ToString());
      }

      excelPackage.Save();
    }

【问题讨论】:

  • WriteToLogFile 方法有什么作用?为什么每次迭代都用相同的信息调用它两次?考虑将此调用取出并在之后将其放入自己的单独迭代中。并且还将worksheet1.Cells.AutoFitColumns() 移动到仅在迭代之外调用一次。
  • 日志仅用于测试目的,不会用于最终产品:)。取出 worksheet1.Cells.AutoFitColumns() 就可以了。

标签: excel datatable c#-3.0 epplus


【解决方案1】:
worksheet1.Cells.AutoFitColumns();

你应该在循环之后调用一次,而不是每一行。

【讨论】:

  • 有没有办法写入excel 97-2003格式(.xls),性能更好
  • npoi.dll 可以读取/写入 .xls 以及 .xlsx 文件。它在github中。此外,尝试将您的数据加载到工作表第 x 行,而不是第 x 行。如果您曾经使用 VBA 将数据集从数据集加载到 Excel 中,COM 库可以将数据集推送到范围 (Range.CopyFromDataset),但您需要在此过程中对其进行转置,因为添加了数据集的行否则Excel列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-07
  • 2011-11-23
  • 2020-12-15
  • 2011-04-13
  • 2013-11-11
  • 1970-01-01
相关资源
最近更新 更多