c# - 使用 EPPlus 多次写入同一个 excel 文件

标签 c# .net epplus

我也在 CodePlex 讨论板上发布了这个问题 (https://epplus.codeplex.com/discussions/468568)

下面是我那里的复制和粘贴:

我正在尝试使用它在 SSIS 中读/写 excel 文档。 64 位模式下的 SSIS 不支持 excel 连接。发生的事情是在写入同一个 excel 文件的不同任务中,第二个 Save() 总是失败。我也能够在 .NET 中重现这一点。以下模拟了我在 SSIS 中的场景。

RowIndex = 2;
using (var ep = new ExcelPackage(new FileInfo(filePath)))
{                
            for (var i= 1; i<= 10; i++)
            {
                var worksheet = ep.Workbook.Worksheets["Sheet1"];
                worksheet.Cells[RowIndex, 1].Value = i;
                RowIndex++;
            }
            ep.Save();
}

RowIndex = 2;
using (var ep = new ExcelPackage(new FileInfo(filePath)))
{                
            for (var ii= 1; ii<= 10; ii++)
            {
                var worksheet = ep.Workbook.Worksheets["Sheet2"];
                worksheet.Cells[RowIndex, 1].Value = ii;
                RowIndex++;
            }
            ep.Save();
}

第二次保存返回以下错误:

{"Error saving file C:\\####.xlsm"}
Inner Exception: 
   {"Index was outside the bounds of the array."}
      at OfficeOpenXml.Utils.CompoundDocument.GetChunk(Byte[] compBuffer, Int32& pos)
   at OfficeOpenXml.Utils.CompoundDocument.DecompressPart(Byte[] part, Int32 startPos)
   at OfficeOpenXml.VBA.ExcelVbaProject.ReadModules()
   at OfficeOpenXml.VBA.ExcelVbaProject.GetProject()
   at OfficeOpenXml.VBA.ExcelVbaProject..ctor(ExcelWorkbook wb)
   at OfficeOpenXml.ExcelWorkbook.get_VbaProject()
   at OfficeOpenXml.ExcelWorkbook.Save()
   at OfficeOpenXml.ExcelPackage.Save()

我尝试加载源代码以通过它进行调试,但是 Cells 集合不再存在。我不确定那是怎么发生的。任何帮助将不胜感激。

最佳答案

您可以对两次保存使用相同的用法。您只需打开文件一次,然后就可以获取/使用另一张纸。这可能会修复您的错误并提高您的表现。

关于c# - 使用 EPPlus 多次写入同一个 excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19964916/

相关文章:

c# - SelectedIndexChanged 事件未针对 1 个列表项触发

c# - WPF - 需要在禁用的 DataGrid 中启用滚动

c# - 如何使用不同分辨率的图像将矩形从一个图像复制到另一个图像

c# - 清理更改跟踪,无效表 anchor 不起作用,想法?

.net - SQL 查询将文本数据存储在 Varbinary(max) 中

.net - 我可以告诉 .net 的 Intellisense 如何对字段进行排序吗?

c# - 具有泛型类型的抽象方法

c# - 使用 EPPlus 对列的组合框范围进行数据验证

c# - 使用 EPPlus 翻译 Excel 单元格的位置

c# - 在列上添加特定的自动过滤器