2013-05-26 49 views
0

我在C#中编写了一个excel加载项,并且我需要获取单元格的textcolor(如果可能,请在RGB中)。从范围获取文本颜色

Range确实有一个Font.Color属性,但这只是一个单一的double,我不知道如何转换为rgb表示 - 实际上不知道它表示什么(恐怖的整个东西的可怕文档,或者也许我看错了地方)

似乎无法在网上找到任何这样的例子,只有如何设置颜色的例子,但使用ColorTranslator.FromOle(而不是ToOle)不起作用因为这期望一个int ..

+1

你有没有试过宏记录器? –

+0

@Mitch这对我有帮助吗?这不仅仅是让我记录一些动作然后重播它吗? – Voo

+0

它也允许你检查它,并看到生成的代码.... –

回答

0

那么我们走了,仔细检查一下数值表明,Font.Color的双倍实际上只是存储整数RGB值。

它工作正常,因为IEEE-754 double可以存储小于2 ** 53的所有整数,所以我们对任何RGBA值的舍入都没有任何问题。对我来说,看起来仍然是一个奇怪的错误,不知道发生了什么。

2

我修改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

+0

我忘了提及这是VBA,而不是C#,但你可能会说出:)。 –

+0

是显而易见的;)问题是'Font.Color'是C#中的一个double,没有任何意义。如果它是一个整数,是的,这是显而易见的,但我应该怎么做一个双?嗯,虽然也许只是使用bitpattern表示或铸造可以工作,让我们看看。 – Voo