我有一个应用程序必须读取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和其他几个库。
我们将不胜感激。提前谢谢
答案 0 :(得分:3)
如果您打算只对excel文件内容执行读取,建议您使用 ExcelDataReader 库而不是Link,它将worksheetData提取到DataSet对象中。
IExcelDataReader reader = null;
string FilePath = "PathToExcelFile";
//Load file into a stream
FileStream stream = File.Open(FilePath, FileMode.Open, FileAccess.Read);
//Must check file extension to adjust the reader to the excel file type
if (Path.GetExtension(FilePath).Equals(".xls"))
reader = ExcelReaderFactory.CreateBinaryReader(stream);
else if (Path.GetExtension(FilePath).Equals(".xlsx"))
reader = ExcelReaderFactory.CreateOpenXmlReader(stream);
if (reader != null)
{
//Fill DataSet
DataSet content = reader.AsDataSet();
//Read....
}
答案 1 :(得分:0)
使用ExcelDataReader。它很容易通过Nuget安装,只需要几行代码:
的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
}
}
}