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数据,然后格式化第二遍所需的单元格的丰富文本。