簡體   English   中英

讀取大型XLSX文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM