VSTO:在“批量”中获取Excel单元格属性

在Excel中从一个范围中获取值时,获取“批量”(作为二维数组)的值要比循环遍历每一行和每一列要高效得多。 例如:

Dim range = Globals.Table.Range("A1:E5") Dim values(,) As Object = range.Value 

25个单元并没有什么区别,但是10000行20列确实没有什么区别。 到现在为止还挺好。

我的问题是:有没有人find一种方法来做其他属性的“批量”取回? 例如,我想查找哪些单元格以某种方式着色。 我喜欢做一些像“range.Interior.Color”,但返回一个值,而不是一个值的数组。 所以我最终循环,这可能是100甚至1000倍慢。 对于大桌子来说,这真是一个杀手。

PS:它看起来像。公式行为就像.Value:我可以一次取多个。 但是我还没有哄骗颜色变得好看。

我感谢您的帮助!

我不认为你可以将这些属性作为一个数组,因为Excel如何存储这些信息。 Excel不会为每个单元格单独存储格式,而是存储特定的格式混合以及使用该格式的范围的内部“列表”。

通过创build一个具有各种格式的小testing文件并将其保存为XML格式(至less在2010年,您需要使用“XML Spreadsheet 2003”),您可以了解如何存储格式。

这篇文章可能也有帮助。

“我想找出哪些单元格有特定的颜色”

在VBA中,您可以使用按格式search的Find方法运行一个快速例程。 例如,要查找与A1中的单元格具有相同单元格字体颜色和内部颜色的所有单元格。 我认为你可以在VSTO中使用类似的东西

 Sub FindFormat() Dim rng1 As Range Dim rng2 As Range Dim strAddress As String With Application.FindFormat .Interior.ColorIndex = [a1].Interior.ColorIndex .Font.Color = [a1].Font.Color End With Set rng1 = Cells.Find("", [a1], xlFormulas, , , , , , True) If Not rng1 Is Nothing Then strAddress = rng1.Address Set rng2 = rng1 Do Set rng1 = Cells.Find("", rng1, xlFormulas, , , , , , True) Set rng2 = Union(rng1, rng2) Loop While rng1.Address <> strAddress MsgBox "Range similar format to A1 is " & rng2.Address End If End Sub 

在这里输入图像描述