EPPlus工作表总是在第一次尝试时抛出异常,然后在第二次尝试时才能正常工作。

3

这段代码来自MVC控制器中的一个较大函数,其中包含了一个带有文件的表单提交。inputStream参数是从上传的文件中获取的:

var excelFile = new ExcelPackage(inputStream.BaseStream);
ExcelWorksheet worksheet;
try
{
    worksheet = excelFile.Workbook.Worksheets["Products"];
}
catch (Exception)
{
    // Second time always works?
    worksheet = excelFile.Workbook.Worksheets["Products"];
}

第一次尝试时,它总是崩溃,但第二次尝试就能正常工作。我收到的异常信息是“已经添加了具有相同键的项。”第二次尝试从不失败。

当然,这是可行的代码,但人们可能会取笑我因为检查了这个代码 ;)

版本:

EPPlus.dll, v3.1.3.0

那很有趣。如果你执行 inputStream.BaseStream.Flush() 和/或 inputStream.BaseStream.Position = 0 会怎样? - Ernie S
@Ernie:我刚试了一下,没什么区别。 - Lucas van Dongen
请发布异常信息以及您正在使用的库的版本。 - antiduh
我已经添加了版本信息,您需要整个错误堆栈吗? - Lucas van Dongen
自从第三版以来,很多东西都发生了变化。可以尝试第四版,看看是否有所改善。 - Ernie S
我在EPPlus 4.1.1中遇到了以下错误,部分堆栈跟踪如下: _[ArgumentException: 已添加具有相同键的项。] System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) +52 System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) +12524358 OfficeOpenXml.Table.ExcelTableCollection..ctor(ExcelWorksheet ws) +331 OfficeOpenXml.ExcelWorksheet.get_Tables() +80 OfficeOpenXml.ExcelWorkbook.ReadAllTables() +137 OfficeOpenXml.ExcelWorksheet.get_Tables() +52 _ - par
2个回答

1
我今天也遇到了同样的问题,非常令人沮丧!我甚至查看了EPPlus的源代码,但并没有真正帮助我解决问题。最终我发现,问题出在EPPlus正在读取的电子表格是由LibreOffice Calc创建的.xlsx电子表格,而不是Microsoft Excel创建的。即使LibreOffice以正确的格式导出,并且该电子表格可以在Excel中打开,但EPPlus期望的某些内容缺失。只要我从Excel而不是LibreOffice保存电子表格,就没有问题了。

今天我的问题是,将Excel文档重新保存为实际的Excel格式,然后它就“神奇地”解决了。 - Emeria

0

我在4.5.3.2版本中遇到了同样的问题。 只是通过第二次调用来克服。


哇,这还真是疯狂啊!我都不再写.Net代码了! - Lucas van Dongen

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