Ответ 1
В рассматриваемой книге определены диапазоны диапазонов. Это вызывало проблемы, поэтому я создал новый файл xlsx только с теми данными, которые мне нужны, и он смог нормально открыть.
Я использую версию 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()
Похоже, что очень простая функциональность настолько нарушена. Я делаю что-то неправильно?
В рассматриваемой книге определены диапазоны диапазонов. Это вызывало проблемы, поэтому я создал новый файл xlsx только с теми данными, которые мне нужны, и он смог нормально открыть.
Я считаю, что excel делает листы из индекса 1, а не индекса 0
var worksheet = package.Workbook.Worksheets[0];
должен быть
var worksheet = package.Workbook.Worksheets[1];
чтобы прочитать первый рабочий лист.
Кроме того, вы можете управлять ими, указав имя:
var worksheet = package.Workbook.Worksheets["Sheet1"];
По крайней мере, с помощью Epplus 3.1.3.0 вы можете просто использовать следующее для доступа к первой рабочей таблице.
ExcelWorksheet workSheet = excel.Workbook.Worksheets.First();
Убедитесь, что документ создан или сохранен в MS Excel (не OpenOffice, Libre Office и т.д.)