如何访问EPPlus中的工作表?

时间:2012-11-26 15:55:53

标签: c# epplus

我使用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()

这似乎是非常基本的功能,如此破碎......我做错了什么?

5 个答案:

答案 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等)创建或保存文档