读取大型 XLSX 文件

Vas*_*hev 4 .net c# asp.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())
           {
           }
        }
 }
Run Code Online (Sandbox Code Playgroud)

这适用于 1 - 10MB 范围内的文件。我的问题是当我尝试加载 10+ MB 的文件时。结果是 OutOfMemoryException。如何正确读取大块数据?如何做到内存高效?

Ps 我尝试使用 ClosedXML、EPPlus 和其他一些库。

每个解决方案将不胜感激。先感谢您

Inn*_*at3 8

如果您计划只读取 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....
        }
Run Code Online (Sandbox Code Playgroud)