有没有人有.Net Excel IO组件基准测试?

时间:2008-08-18 10:58:45

标签: c# excel components

我需要从.Net访问Excel工作簿。我知道不同的方法(我在blog post中写了它们),我知道使用原生的.Net组件将是最快的。但问题是,哪些组件获胜?有没有人对它们进行基准测试?我一直在使用Syncfusion XlsIO,但对于某些关键操作来说这很慢(比如删除包含数千个命名范围的工作簿中的行)。

3 个答案:

答案 0 :(得分:5)

我没有做过任何适当的基准测试,但我尝试了其他几个组件,发现SpreadsheetGear比我之前使用的XlsIO要快得多。我在post

中写了一些我的发现

答案 1 :(得分:1)

无法帮助您解决原始问题,但是您是否知道可以使用OleDbConnection访问Excel文件,因此将其视为数据库?然后,您可以将工作表读入DataTable,对应用程序中的数据执行所需的所有更改,然后使用OleDbConnection将其全部保存回文件。

答案 2 :(得分:0)

是的,但是我不打算发布它们两者都是出于对Syncfusion的礼貌(他们要求你不要发布基准测试),因为我不是一个经验丰富的测试人员所以我的测试可能有些缺陷但是主要是因为你实际的基准测试对谁赢了以及输了多少都有很大的不同。

我参加了他们的一场表演"示例并在EPPlus中添加相同的例程来进行比较。只需简单的插入,XLSIO的速度提高了大约15%,具体取决于行/列比(我尝试过几次),内存使用情况似乎非常相似。当我添加一个例程时,在添加了所有行之后,每隔10行删除一次,然后从那里插入一个新行2行 - 在这种情况下XLSIO明显变慢了。

通用基准对你来说几乎没用。您需要在您使用的特定方案中相互尝试。

我已经使用EPPlus几年了,表现一直很好,我不记得对它大喊大叫。

更值得您考虑的是功能,支持(Syncfusion一直很好,根据我的经验),文档,如果重要的话,访问源代码,以及 - 重要的是 - API对您有多大意义,语法可以完全不同。例如。命名样式

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;