获取所有工作表
Get all worksheets
我在尝试使用 EPPlus 从 excel (xlsx) 文件中获取工作表(只是工作表名称)时遇到了这个非常奇怪的错误。
using (var ep = new ExcelPackage(new FileInfo(filePath)) {
foreach (var ws in ep.Workbook.Worksheets)
....
}
这可以完美地工作(为什么不正确),但有时我发现 excel 文件在尝试获取工作表时只是抛出 System.NullReferenceException
。
抛出异常:'System.NullReferenceException' in EPPlus.dll
最让我困惑的是,当我调试它并逐步进行时,一切正常。
这是 StackTrace:
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) ...
我只是想知道是否有人遇到过类似的错误
如果您想自己尝试,可以下载并尝试其中一个 'not working' xlsx 文件 here。
这是一个包含两个空工作表的空 xlsx 文件。
出现错误是因为工作簿中定义的名称引用了 sheet/table/range 不再存在的名称。 Referenced from here
首先我能够重现您的错误。其次,我删除了这些名称,您的代码运行良好。
不幸的是,每当您引用工作簿时都会发生异常,因此我看不到在包外解决此问题的明确方法。
var wb = ep.Workbook; //also throws error when wb has invalid names
我在尝试使用 EPPlus 从 excel (xlsx) 文件中获取工作表(只是工作表名称)时遇到了这个非常奇怪的错误。
using (var ep = new ExcelPackage(new FileInfo(filePath)) {
foreach (var ws in ep.Workbook.Worksheets)
....
}
这可以完美地工作(为什么不正确),但有时我发现 excel 文件在尝试获取工作表时只是抛出 System.NullReferenceException
。
抛出异常:'System.NullReferenceException' in EPPlus.dll
最让我困惑的是,当我调试它并逐步进行时,一切正常。
这是 StackTrace:
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) ...
我只是想知道是否有人遇到过类似的错误
如果您想自己尝试,可以下载并尝试其中一个 'not working' xlsx 文件 here。
这是一个包含两个空工作表的空 xlsx 文件。
出现错误是因为工作簿中定义的名称引用了 sheet/table/range 不再存在的名称。 Referenced from here
首先我能够重现您的错误。其次,我删除了这些名称,您的代码运行良好。
不幸的是,每当您引用工作簿时都会发生异常,因此我看不到在包外解决此问题的明确方法。
var wb = ep.Workbook; //also throws error when wb has invalid names