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()
これは、非常に基本的な機能が壊れているように思われます。
問題のワークブックには名前付き範囲が定義されていました。これらが問題を引き起こしていたので、必要なデータだけを含む新しいxlsxファイルを作成し、問題なく開くことができました。
私はExcelがインデックス0からではなくインデックス1からのワークシートを実行すると信じています
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などではありません)。