我在尝试使用 EPPlus 从 excel (xlsx) 文件中获取工作表(只是工作表名称)时遇到了这个非常奇怪的错误。
using (var ep = new ExcelPackage(new FileInfo(filePath)) {
foreach (var ws in ep.Workbook.Worksheets)
....
}
这完美无缺(为什么不正确),但有时我会发现只是抛出
System.NullReferenceException
的 excel 文件在尝试获取工作表时。抛出异常:EPPlus.dll 中的“System.NullReferenceException”
最让我困惑的是,当我调试它并逐步进行时,一切正常。
这是堆栈跟踪:
at OfficeOpenXml.ExcelRangeBase..ctor(ExcelWorksheet xlWorksheet, String address)
at OfficeOpenXml.ExcelNamedRangeCollection.Add(String Name, ExcelRangeBase Range)
at OfficeOpenXml.ExcelWorkbook.GetDefinedNames()
at OfficeOpenXml.ExcelPackage.get_Workbook()
at isef.winformapp.Helpers.ExcelUtilities.GetWorksheets(String filePath) ...
我只是想知道是否有人遇到过类似的错误
您可以下载并尝试其中一个“不起作用”的 xlsx 文件 here如果你想自己试试。
这是一个带有两个空工作表的空 xlsx 文件。
最佳答案
发生错误是因为工作簿中定义的名称引用了不再存在的工作表/表格/范围。 Referenced from here
首先,我能够复制您的错误。其次,我删除了这些名称,您的代码运行良好。
不幸的是,每当您引用工作簿时都会发生异常,因此我看不出在包外解决此问题的明确方法。
var wb = ep.Workbook; //also throws error when wb has invalid names
关于c# - 获取所有工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62172348/