2008-08-18 57 views
5

我需要从.Net访问Excel工作簿。我知道所有关于这样做的不同方式(我已经将它们写入了blog post),并且我知道使用本机.Net组件将会是最快的。但问题是,哪些组件获胜?有人以他们为基准吗?我一直在使用Syncfusion XlsIO,但对于某些关键操作(例如删除包含数千个命名范围的工作簿中的行),速度非常慢。有没有人有.Net Excel IO组件基准?

回答

5

我还没有做任何适当的基准,但我尝试了其他几个组件,发现SpreadsheetGear比我以前使用的XlsIO快得多。我已经写了一些我的发现在这post

1

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

+0

保罗,谢谢。我意识到这一点(我应该把它包括在我的博客文章中)。但在这种情况下,它并不是我真正需要的数据。这就像Cell风格和格式化等。Sam – 2008-08-18 13:10:42

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; 
相关问题