首页 > 解决方案 > 函数 Save() 和 SaveAs() 太慢了

问题描述

我正在尝试从 Json 转换为 Excel。json很大。所以,我不能使用直接转换。

我说的是至少有 1200 万个条目。

我正在使用 JsonReader 读取 Json 文件并将部分转换为 DataTable。

ExcelSheet 有 1048576 行限制。所以,我需要创建不同的工作表。

所以,我正在从 DataTables 加载不同的工作表。问题是当我所有的数据表都被加载时,Save() 操作永远不会结束。

一个小片段:

private void LoadDataTable(DataTable dt, ExcelPackage ep, string newName){
       OfficeOpenXml.ExcelWorksheet sheet = ep.Workbook.Worksheets.Add(newName); 
       sheet.Cells.LoadFromDataTable(dt, true);
}



static void Main(string[] args)
{
         using (ExcelPackage ep = new ExcelPackage(new FileInfo(output)))
         using (StreamReader sw = new StreamReader(input))
         using (JsonTextReader jr = new JsonTextReader(sw))
         {

               while(jr.Read()){
                   DataTable dt = new DataTable();
                       .........

                   //Filling DataTable with data.
                       .........
                   LoadDataTable(dt,ep,"foo"+i);

               } //The total of the the iterations takes 6 minutes more or less

               ep.Save();// Never ends. Here is my problem. 
         }
}  

我认为该操作sheet.Cells.LoadFromDataTable(dt, true);将所有数据加载到内存中,而不是文件中。运行时ep.Save(),它开始从内存转储到文件。所以,它是极其低效的。

有什么方法可以直接写入excel文件吗?或者我怎样才能做得ep.Save()更快?

更新:

我找到了这个链接

我使用的是 .NET Core,Epplus 版本是 v4.5.3.2

标签: c#excelepplus

解决方案


恕我直言,不鼓励拥有 1200 万条记录的 Excel 工作簿。您认为用户如何处理如此大量的数据?

这是非常糟糕的设计。

您应该使用数据库来导入和存储所有这些东西,然后执行 SQL 查询,结果可以集成到更小的 Excel 文件中。


推荐阅读