asp.net 阅读大XLSX文件

qoefvg9y  于 9个月前  发布在  .NET
关注(0)|答案(2)|浏览(128)

我有一个应用程序,必须读取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 - 10 MB范围内的文件非常有效。我的问题是当我试图加载10+ MB的文件。结果是OutOfMemoryException。如何正确读取这一大块数据?如何提高内存效率?
P.s.我尝试了像ClosedXML,EPPlus和其他一些库。
任何解决方案都将受到赞赏。提前感谢您

rbl8hiat

rbl8hiat1#

如果您计划只对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());
    }
}
4sup72z8

4sup72z82#

使用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
            }
        }
    }

相关问题