【问题标题】:EPPlus Array dimensions exceeded supported range. System.OutOfMemoryExceptionEPPlus 阵列尺寸超出了支持的范围。 System.OutOfMemoryException
【发布时间】:2017-04-18 08:29:56
【问题描述】:

好的,我正在尝试将 CSVStream 加载到 ExcelPackage 中(我正在使用 EPPlus)。

无论我选择什么选项,它总是在第 221482 行失败。我在 x64 上运行,我的 app.config 中有...

给出的错误是标题中的错误:(

    public ExcelPackage ExcelPackageFromCsvStream(Stream csvStream)
    {
        var excelPackage = new ExcelPackage();
        var workSheet = excelPackage.Workbook.Worksheets.Add("Sheet1");

        var csvFormat = new ExcelTextFormat
        {
            Delimiter = ',',
            TextQualifier = '"',
            DataTypes = new[] { eDataTypes.String }
        };

        using (var sr = new StreamReader(csvStream))
        {
            int i = 1;
            foreach (var line in sr.ReadLines("\r\n"))
            {
                workSheet.Cells["A" + i].LoadFromText(line, csvFormat);
                i++;
            }
        }

        return excelPackage;
    }

【问题讨论】:

    标签: asp.net csv openxml epplus excelpackage


    【解决方案1】:

    通过创建多个 ExcelPackage 解决了它,并且我已经分批读取了流(例如一次 200k 行)

        public List<ExcelPackage> ExcelPackagesFromCsvStream(Stream csvStream, int batchSize)
        {
            var excelPackages = new List<ExcelPackage>();
            int currentPackage = -1; // so that first package will have the index 0
    
            var csvFormat = new ExcelTextFormat
            {
                Delimiter = ',',
                TextQualifier = '"',
                DataTypes = new[] {eDataTypes.String}
            };
    
    
            using (var sr = new StreamReader(csvStream))
            {
                int index = 1;
    
                foreach (var line in sr.ReadLines("\r\n"))
                {
                    if ((index - 1) % batchSize == 0)
                    {
                        var excelPackage = new ExcelPackage();
                        excelPackage.Workbook.Worksheets.Add("Sheet1");
    
                        excelPackages.Add(excelPackage);
                        currentPackage++;
                        index = 1;
                    }
    
                    excelPackages[currentPackage].Workbook.Worksheets.First().Cells["A" + index].LoadFromText(line, csvFormat);
                    index++;
                }
            }
    
            return excelPackages;
        }
    

    【讨论】:

      猜你喜欢
      • 2021-06-08
      • 2018-12-19
      • 2018-05-29
      • 2021-07-03
      • 2021-09-13
      • 2018-06-30
      • 2021-08-26
      • 2021-10-20
      • 1970-01-01
      相关资源
      最近更新 更多