我有一个应用程序必须读取 Excel 并将其转换为数组。到目前为止,一切都很好。一切正常文件,直到我尝试转换更大的文件。我尝试 OpenXML 并尝试 SAX 方法:
using (SpreadsheetDocument xlsx = SpreadsheetDocument.Open(filePath, false))
{
WorkbookPart workbookPart = xlsx.WorkbookPart;
List<List<string>> parsedContent = new List<List<string>>();
foreach (WorksheetPart worksheet in workbookPart.WorksheetParts)
{
OpenXmlReader xlsxReader = OpenXmlReader.Create(worksheet);
while (xlsxReader.Read())
{
}
}
}
这对于 1 - 10MB 范围内的文件效果很好。我的问题是当我尝试加载 10+ MB 文件时。结果是 OutOfMemoryException。如何正确读取这么大的数据呢?如何做到记忆高效?
P.s.我尝试了 ClosedXML、EPPlus 等库。
每一个解决方案都将受到赞赏。先谢谢你了
如果您打算只读取 Excel 文件内容,我建议您使用 ExcelDataReader 库代替 Link。
using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read))
{
using (var reader = ExcelReaderFactory.CreateReader(stream))
{
do
{
// Read row
while (reader.Read())
{
// Read column values
for (int i = 0; i < reader.FieldCount; i++)
{
var cellValue = reader.GetValue(i);
}
}
}
while (reader.NextResult());
}
}
使用ExcelDataReader。通过 Nuget 很容易安装,只需要几行代码:
努吉特:
Install-Package ExcelDataReader
用途:
using (FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read))
{
using (IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream))
{
DataSet result = excelReader.AsDataSet();
foreach (DataRow dr in result[0])
{
//Do stuff
}
}
}