web-dev-qa-db-ja.com

EPPlusでワークシートにアクセスする方法は?

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()

これは、非常に基本的な機能が壊れているように思われます。

14

問題のワークブックには名前付き範囲が定義されていました。これらが問題を引き起こしていたので、必要なデータだけを含む新しいxlsxファイルを作成し、問題なく開くことができました。

7

私はExcelがインデックス0からではなくインデックス1からのワークシートを実行すると信じています

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

する必要があります

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

最初のワークシートを読む。

24
Pat

また、名前を参照して管理することもできます。

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

少なくともEpplus 3.1.3.0では、以下を使用して最初のワークシートにアクセスできます。

ExcelWorksheet workSheet = Excel.Workbook.Worksheets.First();
5
Paul Zahra

ドキュメントがMS Excelで作成または保存されていることを確認します(OpenOffice、Libre Officeなどではありません)。

3