20

我正在使用 EPPlus 库的 3.1 版本来尝试访问 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()

这似乎是非常基本的功能已经被破坏了..我做错了什么吗?

4

5 回答 5

30

我相信 excel 的工作表来自索引 1 而不是索引 0

 var worksheet = package.Workbook.Worksheets[0]; 

应该

var worksheet = package.Workbook.Worksheets[1];

阅读第一个工作表。

于 2013-03-17T03:03:32.193 回答
23

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

var worksheet = package.Workbook.Worksheets["Sheet1"];
于 2014-02-06T14:44:19.110 回答
8

至少对于 Epplus 3.1.3.0,您可以简单地使用以下内容访问第一个工作表。

ExcelWorksheet workSheet = excel.Workbook.Worksheets.First();
于 2015-08-24T10:16:08.117 回答
7

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

于 2012-11-26T18:10:39.847 回答
3

确保使用 MS Excel(不是 OpenOffice、Libre Office 等)创建或保存的文档

于 2015-09-25T11:03:06.403 回答