如何访问EPPlus中的工作表?

Sha*_*lle 13 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)
   ...
}
Run Code Online (Sandbox Code Playgroud)

异常堆栈:

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()
Run Code Online (Sandbox Code Playgroud)

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

Pat*_*Pat 24

我相信excel会从索引1而不是索引0来处理工作表

 var worksheet = package.Workbook.Worksheets[0]; 
Run Code Online (Sandbox Code Playgroud)

应该

var worksheet = package.Workbook.Worksheets[1];
Run Code Online (Sandbox Code Playgroud)

阅读第一个工作表.

  • 在excel和漂亮的连接它的所有东西,索引从1开始,而不是0.很好的提醒.谢谢. (2认同)

BMa*_*mus 18

此外,您可以通过引用名称来管理它们:

var worksheet = package.Workbook.Worksheets["Sheet1"];
Run Code Online (Sandbox Code Playgroud)


Sha*_*lle 7

有问题的工作簿已定义了命名范围.这些都导致了问题所以我创建了一个新的xlsx文件,只有我需要的数据,并且能够打开.


Pau*_*hra 5

至少使用Epplus 3.1.3.0,您只需使用以下内容即可访问第一个工作表.

ExcelWorksheet workSheet = excel.Workbook.Worksheets.First();
Run Code Online (Sandbox Code Playgroud)