我也在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集合不再存在。我不确定那是怎么回事。任何帮助将不胜感激。
答案 0 :(得分:0)
您可以对两个保存使用相同的用法。您只需要打开一次文件,然后再获取/使用另一张纸即可。这可能会解决您的错误并提高性能。