Как получить доступ к листам в EPPlus?

Я использую версию 3.1 библиотеки EPPlus, чтобы попытаться получить доступ к листу в файле Excel. Когда я пытаюсь выполнить один из следующих методов, я получаю a 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()

Похоже, что очень простая функциональность настолько нарушена. Я делаю что-то неправильно?

Ответ 1

В рассматриваемой книге определены диапазоны диапазонов. Это вызывало проблемы, поэтому я создал новый файл xlsx только с теми данными, которые мне нужны, и он смог нормально открыть.

Ответ 2

Я считаю, что excel делает листы из индекса 1, а не индекса 0

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

должен быть

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

чтобы прочитать первый рабочий лист.

Ответ 3

Кроме того, вы можете управлять ими, указав имя:

var worksheet = package.Workbook.Worksheets["Sheet1"];

Ответ 4

По крайней мере, с помощью Epplus 3.1.3.0 вы можете просто использовать следующее для доступа к первой рабочей таблице.

ExcelWorksheet workSheet = excel.Workbook.Worksheets.First();

Ответ 5

Убедитесь, что документ создан или сохранен в MS Excel (не OpenOffice, Libre Office и т.д.)