我在C#中编写了一个excel加载项,并且我需要获取单元格的textcolor(如果可能,请在RGB中)。从范围获取文本颜色
Range确实有一个Font.Color属性,但这只是一个单一的double,我不知道如何转换为rgb表示 - 实际上不知道它表示什么(恐怖的整个东西的可怕文档,或者也许我看错了地方)
似乎无法在网上找到任何这样的例子,只有如何设置颜色的例子,但使用ColorTranslator.FromOle
(而不是ToOle)不起作用因为这期望一个int ..
我在C#中编写了一个excel加载项,并且我需要获取单元格的textcolor(如果可能,请在RGB中)。从范围获取文本颜色
Range确实有一个Font.Color属性,但这只是一个单一的double,我不知道如何转换为rgb表示 - 实际上不知道它表示什么(恐怖的整个东西的可怕文档,或者也许我看错了地方)
似乎无法在网上找到任何这样的例子,只有如何设置颜色的例子,但使用ColorTranslator.FromOle
(而不是ToOle)不起作用因为这期望一个int ..
那么我们走了,仔细检查一下数值表明,Font.Color
的双倍实际上只是存储整数RGB值。
它工作正常,因为IEEE-754 double可以存储小于2 ** 53的所有整数,所以我们对任何RGBA值的舍入都没有任何问题。对我来说,看起来仍然是一个奇怪的错误,不知道发生了什么。
我修改this code稍微得到:
Sub test()
Dim Col As Long
Dim R As Long, G As Long, B As Long
Col = ActiveCell.Font.Color
R = Col Mod 256
G = (Col \ 256) Mod 256
B = (Col \ 256 \ 256) Mod 256
Debug.Print R
Debug.Print G
Debug.Print B
End Sub
这里有一些有趣的阅读Chip Pearson。
我忘了提及这是VBA,而不是C#,但你可能会说出:)。 –
是显而易见的;)问题是'Font.Color'是C#中的一个double,没有任何意义。如果它是一个整数,是的,这是显而易见的,但我应该怎么做一个双?嗯,虽然也许只是使用bitpattern表示或铸造可以工作,让我们看看。 – Voo
你有没有试过宏记录器? –
@Mitch这对我有帮助吗?这不仅仅是让我记录一些动作然后重播它吗? – Voo
它也允许你检查它,并看到生成的代码.... –