读取大型XLSX文件

时间:2016-11-21 09:34:57

标签: c# asp.net .net excel web-services

我有一个应用程序必须读取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和其他几个库。

我们将不胜感激。提前谢谢

2 个答案:

答案 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
            }
        }
    }