Excel Interop:最快的方法来改变大量单元格中文本部分的颜色
有一些关于使用Excel interop直接将数据数组分配给范围的值来写入数据的最快方法的文章。 喜欢:
string[,] multidimensionalArrayData = new string[200, 3]; // (...) Fill multidimensionalArrayData with your data dataSheet.Range["A1:C200"].Value = multidimensionalArrayData;
还有一些关于如何改变文本的特定部分的字体颜色的文章,例如(VB这次):
With ActiveCell.Characters(Start:=3, Length:=3).Font .Name = "Arial" .FontStyle = "Regular" .Size = 10 .Color = "Red" .ThemeFont = xlThemeFontNone End With
现在的问题是,改变数千个单元格文本特定部分颜色的最快方法是什么? 目前,在我的C#代码中,我必须逐个单元地执行,并且性能可怕。 有没有办法在C#中填充“字符”对象的数组,并将该数组传递到一个范围? 任何其他解决scheme
使用Excel Interop的操作总是比较慢,消耗更多内存,不推荐使用。
下面是一些开源的,但更快的方式来做你所需要的,而不需要安装Excel:
http://closedxml.codeplex.com/
http://epplus.codeplex.com/
http://code.google.com/p/excellibrary/
http://npoi.codeplex.com
由微软发布: Open XML 2.0
另一种更快的方式来做你想做的事情。
下载: http : //www.microsoft.com/en-us/download/details.aspx?id=5124
简介: http : //blog.stuartwhiteford.com/?p=49
我不确定你会用这个代码获得很大的性能提升(因为入侵单个单元是一个耗时的操作)。 字符显然是一个范围属性,所以你不必指定一个特定的单元格。
您可以使用以下来避免循环
With Range("A1:A3").Characters(1, 2).Font .Name = "Arial" .Size = 6 End With
很好的问题….我有很多用于格式化部分单元格的用例,但手动操作是很痛苦的。
经过几个月的与Excel写作的不同图书馆的努力,我必须说,我终于回到Excel Interop,信不信由你。
我尝试了使用ClosedXML,EPPlus和SpreadsheetLite来学习每个库以及调整代码的麻烦。 经过长时间的周转,错误,有时会产生无法打开的Excel,有时会出现可怕的性能问题或内存不足崩溃,我决定再次尝试使用Excel Interop,并且很惊讶地看到它更快并没有错误为我的情况。
如果您想尝试使用mjb答案中的库,请执行此操作,但我build议您尽可能以最好的方式编写Interop代码,但如果做得对,则可能会让您感到惊讶。
我的情况最好的select是:
使用Excel Interop。 使用2维数组一次性写入所有Excel数据,然后格式化第二遍所需的单元格的丰富文本。