首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EPPlus数组维度超出了支持范围。System.OutOfMemoryException

EPPlus数组维度超出了支持范围。System.OutOfMemoryException
EN

Stack Overflow用户
提问于 2017-04-18 08:29:56
回答 1查看 1.8K关注 0票数 1

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

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

给出的错误来自标题:(

代码语言:javascript
运行
复制
    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;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-20 10:48:15

通过创建多个ExcelPackages来解决这个问题,而且我还分批读取了流(例如,一次读取200 k行)

代码语言:javascript
运行
复制
    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;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43467311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档