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はインデックス0ではなくインデックス1のワークシートを実行すると思います

 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 に答える