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.
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.
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.
Vous pouvez également les gérer en référençant le nom:
var worksheet = package.Workbook.Worksheets["Sheet1"];
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();
Assurez-vous que le document créé ou enregistré avec MS Excel (pas OpenOffice, Libre Office, etc.)