我使用3.1版本的EPPlus库试图访问Excel文件中的工作表。当我尝试以下任一方法时,我得到System.ArgumentException : An item with the same key has already been added
。
using (ExcelPackage package = new ExcelPackage(new FileInfo(sourceFilePath)))
{
var worksheet = package.Workbook.Worksheets[0];
// OR
foreach (var excelWorksheet in package.Workbook.Worksheets)
...
}
异常堆栈:
System.ArgumentException : An item with the same key has already been added.
at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
at OfficeOpenXml.ExcelNamedRangeCollection.Add(String Name, ExcelRangeBase Range)
at OfficeOpenXml.ExcelWorkbook.GetDefinedNames()
at OfficeOpenXml.ExcelPackage.get_Workbook()
这似乎是非常基本的功能,如此破碎......我做错了什么?
答案 0 :(得分:24)
我相信excel会处理索引1而不是索引0的工作表
var worksheet = package.Workbook.Worksheets[0];
应该是
var worksheet = package.Workbook.Worksheets[1];
阅读第一张工作表。
答案 1 :(得分:18)
此外,您可以通过引用名称来管理它们:
var worksheet = package.Workbook.Worksheets["Sheet1"];
答案 2 :(得分:7)
有问题的工作簿已定义了命名范围。这些都导致了问题所以我创建了一个新的xlsx文件,只包含我需要的数据,并且能够打开。
答案 3 :(得分:5)
至少在Epplus 3.1.3.0中,您只需使用以下内容即可访问第一个工作表。
ExcelWorksheet workSheet = excel.Workbook.Worksheets.First();
答案 4 :(得分:3)
确保使用MS Excel(不是OpenOffice,Libre Office等)创建或保存文档