web-dev-qa-db-fra.com

Comment accéder aux feuilles de calcul dans EPPlus?

J'utilise la version 3.1 de la bibliothèque EPPlus pour essayer d'accéder à une feuille de calcul dans un fichier Excel. Lorsque j'essaie l'une des méthodes suivantes, j'obtiens un 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)
   ...
}

Pile d'exception:

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

Cela semble être une fonctionnalité très basique d'avoir été si cassée.

14
Shane Courtrille

Le classeur en question avait nommé des plages définies. Celles-ci causaient des problèmes, j'ai donc créé un nouveau fichier xlsx avec juste les données dont j'avais besoin et il a pu s'ouvrir correctement.

7
Shane Courtrille

Je crois qu'Excel fait des feuilles de calcul à partir de l'index 1 et non de l'index 0

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

devrait être

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

pour lire la première feuille de calcul.

24
Pat

Vous pouvez également les gérer en référençant le nom:

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

Au moins avec Epplus 3.1.3.0, vous pouvez simplement utiliser ce qui suit pour accéder à la première feuille de calcul.

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

Assurez-vous que le document créé ou enregistré avec MS Excel (pas OpenOffice, Libre Office, etc.)

3
Alexander Shagin