[英]Reading large XLSX files
我有一個必須閱讀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。 如何正確讀取大數據? 如何做到內存高效?
附言:我嘗試像ClosedXML,EPPlus等庫。
每個解決方案將不勝感激。 先感謝您
如果計划僅對excel文件內容執行讀取,則建議您使用ExcelDataReader庫而不是Link ,該庫將工作表數據提取到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....
}
使用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
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.