【发布时间】:2015-03-06 11:09:54
【问题描述】:
The following code segment is used to read a very large Excel
file using the DOM approach.
然后举个例子。我用它来实现读取具有 700K 行的相对较大的文件。我现在有这个代码:
using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(path, false))
{
WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
// no other code
}
当我启动我的程序时,我发现它以多快的速度耗尽内存 (>1G) - 只需 5 秒。并且调试器指向这行代码:
SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
所以,我需要知道OpenXML 是否真的有助于读取大文件。如果没有,还有什么替代方案(互操作没有帮助 - 我已经检查过了)。
编辑
一个额外的神秘事物。我现在得到的这段代码:
OpenXmlReader reader = OpenXmlReader.Create(worksheetPart);
while (reader.Read())
{
if (reader.ElementType == typeof(Row))
{
count++;
}
}
在count 变量中为我提供超过一百万行。但是,我在第一张纸上有 14K,在第二张纸上有 700K。这很奇怪。所以,我的额外问题是如何使用SAX 方法仅解析带有数据的行。在 OpenXML 上读取大型 Excel 文件的最后一个谜团。 thread 中的一个人说:“事实证明,由于某种原因,工作表被向后枚举(所以我的三张表中的第一张实际上是索引 3”。所以,我最后一个额外的问题是如何获得你想要的表.此刻我使用这个代码:
WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
但考虑到所说的内容,我不确定在我的情况下我是否真的会得到第一个工作表。
【问题讨论】: