2013-05-26 132 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