2013-05-26 2 views
0

Я пишу надстройку excel на C#, и среди прочего мне нужно получить цвет текста (по возможности в RGB) ячейки.Получить цвет текста из диапазона

Диапазон имеет свойство Font.Color, но это всего лишь один двойник, который я понятия не имею, как преобразовать в представление rgb - на самом деле не знаю, что он представляет (ужасная документация для всего, что я боюсь, или возможно, я искал не то место)

Невозможно найти примеры для этого в Интернете, только примеры того, как установить цвет, но с использованием ColorTranslator.FromOle (вместо ToOle) не работает так что ожидает Int ..

+1

Вы пробовали магнитофон? –

+0

@Mitch Как это мне поможет? Разве это не позволяет мне записать какое-то действие, а затем воспроизвести его? – Voo

+0

он также позволяет вам проверять его и видеть код, сгенерированный .... –

ответ

0

Ну, вот мы идем, чуть ближе осмотр значений показывает, что двойное значение Font.Color фактически просто хранит целочисленные значения RGB.

Что хорошо работает, потому что двойник IEEE-754 может хранить все целые числа меньше 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#, что не имеет никакого смысла. Если бы это было int, да, это было бы очевидно, но какого черта я должен делать с двойником? Хм, хотя, возможно, просто использование представления битпаттера или кастинга могло бы работать, давайте посмотрим. – Voo

Смежные вопросы