EPPlus使用时无法删除工作表

4

我正在使用这段代码:

ExcelPackage pck = new ExcelPackage(newFile);

var wk = pck.Workbook.Worksheets.SingleOrDefault(x => x.Name == "Content");

pck.Workbook.Worksheets.Delete(wk);

但是在删除时,它给我“IndexOutOfRangeException”,但我试图从对象中删除,我尝试通过索引“1”进行删除,我只有两个工作表,并且出现了相同的异常。文件和工作表不为空,但无论如何执行删除,我都会收到“IndexOutOfRangeException”。
发生了什么?
注:我也是使用ExcelPackage创建了这个工作表,现在想要删除它。

你确定 wk 不是 null 吗? - Chris Ballard
我也遇到了同样的异常,使用这个一行代码:while (wb.Worksheets.Count > 0) wb.Worksheets.Delete(0); - Uwe Keim
顺便提一下,当我将代码更改为 while (wb.Worksheets.Count > 0) wb.Worksheets.Delete(1); 时,没有出现异常。看起来索引是基于1的,而不是基于0的。 - Uwe Keim
这似乎是一个类似的问题:http://epplus.codeplex.com/workitem/14929。 - Uwe Keim
你还没有添加名为“Content”的任何工作表,所以为什么wk会为空呢? - Chris
你发布了你正在使用的实际代码吗?因为你应该得到一个KeyNotFoundException,而不是IndexOutOfRangeException。 - Chris
1个回答

5

看起来你遇到了一些临时的错误问题,但这已经被修复了。从EpPlus 4.0.1.1开始,以下代码完美运行:

var workbookFileInfo = new FileInfo(@"Workbook.xlsx");
using (var excelPackage = new ExcelPackage(workbookFileInfo))
{
    excelPackage.Workbook.Worksheets.Add("Worksheet1");
    excelPackage.Workbook.Worksheets.Add("Worksheet2");
    excelPackage.Save();
}
using (var excelPackage = new ExcelPackage(workbookFileInfo))
{
    var worksheet = excelPackage.Workbook.Worksheets.SingleOrDefault(x => x.Name == "Worksheet1");
    excelPackage.Workbook.Worksheets.Delete(worksheet);
    excelPackage.Save();
}

请尝试升级到最新稳定版本的EpPlus,如果此举无法帮助您,请发布适用于最新版本的其他详细信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接