Question

J'ai besoin d'accéder aux classeurs Excel à partir de .Net.Je connais les différentes manières de procéder (je les ai écrites dans un article de blog), et je sais que l'utilisation d'un composant natif .Net sera la plus rapide.Mais la question est : lequel des composants gagne ?Quelqu'un les a-t-il comparés ?J'utilise Syncfusion XlsIO, mais c'est très lent pour certaines opérations clés (comme la suppression de lignes dans un classeur contenant des milliers de plages nommées).

Était-ce utile?

La solution

Je n'ai pas effectué de tests appropriés, mais j'ai essayé plusieurs autres composants et j'ai découvert que Feuille de calculGear était considérablement plus rapide que XlsIO que j'utilisais auparavant.J'ai écrit certaines de mes découvertes dans ce poste

Autres conseils

Je ne peux pas vous aider avec votre question initiale, mais savez-vous que vous pouvez accéder aux fichiers Excel à l'aide d'une OleDbConnection, et donc les traiter comme une base de données ?Vous pouvez ensuite lire des feuilles de calcul dans un DataTable, apporter toutes les modifications dont vous avez besoin aux données de votre application, puis enregistrer le tout dans le fichier à l'aide d'une OleDbConnection.

Oui mais je ne vais pas les publier tous les deux par courtoisie envers Syncfusion (ils vous demandent de ne pas publier de benchmarks), car je ne suis pas un testeur expérimenté donc mes tests sont probablement quelque peu imparfaits mais surtout parce que ce que vous faites réellement une énorme différence quant à savoir qui gagne et dans quelle mesure.

J'ai pris un de leurs exemples de "performances" et ajouté la même routine dans EPPlus pour les comparer.XLSIO était environ 15 % plus rapide avec des insertions simples, en fonction du rapport ligne/colonne (j'en ai essayé quelques-unes), l'utilisation de la mémoire semblait très similaire.Lorsque j'ai ajouté une routine qui, une fois toutes les lignes ajoutées, supprimait toutes les 10 lignes, puis insérait une nouvelle ligne 2 lignes plus haut, XLSIO était nettement plus lent dans ces circonstances.

Un benchmark générique vous est pratiquement inutile.Vous devez les essayer les uns contre les autres dans les scénarios spécifiques que vous utilisez.

J'utilise EPPlus depuis quelques années et les performances sont bonnes, je ne me souviens pas d'avoir crié dessus.

La fonctionnalité, le support (Syncfusion a été bon, d'après mon expérience), la documentation, l'accès au code source si cela est important et - surtout - le sens que l'API vous apporte, la syntaxe peut être plus digne de votre attention. assez différent.par exemple.Styles nommés

XLSIO

headerStyle.BeginUpdate();
workbook.SetPaletteColor(8, System.Drawing.Color.FromArgb(255, 174, 33));
headerStyle.Color = System.Drawing.Color.FromArgb(255, 174, 33);
headerStyle.Font.Bold = true;
headerStyle.Borders[ExcelBordersIndex.EdgeLeft]  .LineStyle = ExcelLineStyle.Thin;
headerStyle.Borders[ExcelBordersIndex.EdgeRight] .LineStyle = ExcelLineStyle.Thin;
headerStyle.Borders[ExcelBordersIndex.EdgeTop]   .LineStyle = ExcelLineStyle.Thin;
headerStyle.Borders[ExcelBordersIndex.EdgeBottom].LineStyle = ExcelLineStyle.Thin;
headerStyle.EndUpdate();

EPPlus

ExcelNamedStyleXml headerStyle = xlPackage.Workbook.Styles.CreateNamedStyle("HeaderStyle");
headerStyle.Style.Fill.PatternType = ExcelFillStyle.Solid; // <== needed or BackgroundColor throws an exception
headerStyle.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.FromArgb(255, 174, 33));
headerStyle.Style.Font.Bold = true;
headerStyle.Style.Border.Left.Style   = ExcelBorderStyle.Thin;
headerStyle.Style.Border.Right.Style  = ExcelBorderStyle.Thin;
headerStyle.Style.Border.Top.Style    = ExcelBorderStyle.Thin;
headerStyle.Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top