2012-11-26 1 views
9

J'utilise la version 3.1 de la librairie 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.Comment accéder aux feuilles de calcul dans EPPlus?

using (ExcelPackage package = new ExcelPackage(new FileInfo(sourceFilePath))) 
{ 
    var worksheet = package.Workbook.Worksheets[0]; 

    // OR 

    foreach (var excelWorksheet in package.Workbook.Worksheets) 
    ... 
} 

Exception Stack:

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 simple d'avoir être ainsi cassé .. ce que je fais quelque chose de mal?

+0

Est-il possible que le fichier Excel est un fichier 'xls' origine? EPPlus ne comprend que 'xlsx'. Essayez de l'enregistrer en tant que 'xlsx' manuellement en premier. –

Répondre

4

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

+0

Je sais que c'est 2 ans, mais si cela a résolu votre problème, vous devez accepter votre propre réponse pour aider à mettre en évidence pour d'autres qui ont le même problème – psubsee2003

+0

c'était la seule solution probable pour moi, parmi toutes les réponses. J'ai supprimé les rangs nommés; ça n'a pas aidé. Le point est que l'objet Worksheets lance l'exception. –

21

Je crois que Excel ne feuilles de l'index 1 non index 0

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

devrait être

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

pour lire la première feuille.

+2

En Excel et joli tout ce qui s'y connecte, les index commencent par 1, pas 0. Beau rappel. Merci. – Doruk

13

En outre, vous pouvez les gérer en référençant le nom:

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

Au moins avec Epplus 3.1.3.0, vous pouvez simplement utiliser les éléments suivants pour accéder à la première feuille de calcul.

ExcelWorksheet workSheet = excel.Workbook.Worksheets.First(); 
2

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

Questions connexes