c# - 函数 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
解决方案
恕我直言,不鼓励拥有 1200 万条记录的 Excel 工作簿。您认为用户如何处理如此大量的数据?
这是非常糟糕的设计。
您应该使用数据库来导入和存储所有这些东西,然后执行 SQL 查询,结果可以集成到更小的 Excel 文件中。
推荐阅读
- html - 如何防止我的通用 * { ... } 样式覆盖父标签
- google-chrome - 后台模式下的 PWA 行为
- html - 打印时如何在每个页面上添加徽标
- dictionary - 用于在地图上插入和总查找的 Monad 转换器?
- java - 将索引列添加到 apache spark 数据集
使用java
- postgresql - 在 postgres 上使用 `random_page_cost` 优化最近的事件搜索和缓存使用
- python-3.x - 如果值存在,则数据框过滤器,否则返回所有
- android - 使用 FB 和 google 移动广告 sdk 时,一个 dex 文件中的字段引用过多
- spring - 如何使用 Spring Batch 将 JPARepository 与 ItemReader 连接?
- javascript - 如何更新基于作用域/闭包的解构 JavaScript 变量?