Взаимодействие с Office 2007 [и выше]: получение RGB-цвета


ОБНОВИТЬ: Если вам нужно определить цвет rgb в офисном документе (формат 2007), посмотрите мой ответ ниже.

Есть:

Interop.Word.dll ver.14 из PIA VS2010,VS2010 Express EditionMS Word 2010 (версия 14).docx-файл, созданный в упомянутом Word вручную без Interop. Файл содержит несколько таблиц с цветными угловыми ячейками.

Цель: Для создания другого .docx-файла с Interop содержались таблицы, заполненные градиентным цветом на основе цветов в его углах.
Где появляется проблема: Мне нужно преобразовать цвета в углах таблиц изWdColor вSystem.Drawing.Color рассчитать градиент. Так что я работаю с клеткамиShading.BackgroundPatternColor свойство. И я обнаружил, что иногда он содержит правильное 24-битное значение BGR, а иногда нет.
Второй случай появляется только тогда, когда ячейка имеет один из цветов палитры темы (стандартные цвета и цвета палитры rgb работают хорошо, но цвета палитры темы приводят к проблеме). Например, когда я установил0x00F2F2F2 (самый светлый серый) цвет, то он хранится вdocument.xml в архиве .docx-файла правильно, ноShading.BackgroundPatternColor свойство установлено в0xDC00F2FF, ТакColorTranslator.FromOle возвращает другой цвет.
Кстати, для этого серого в перечислении нет WdColor. Самый светлый серыйwdColorGray05 = 0xF3F3F3 из-за .Net Reflector. Это означает, что не все цвета палитры по умолчанию соответствуют перечисляемым цветам.
Также, если я вручную установлю тот же цвет в RGB-палитре в Word (т. Е. 242, 242, 242), сохраните файл и снова откройте с помощью Interop - цвет будет правильно установлен как0x00F2F2F2!
Вопрос: У кого-нибудь была такая проблема? Как правильно получить цвет RGB изShading.BackgroundPatternColor свойство? Почему это свойство не соответствует значению, хранящемуся вdocument.xml?

Ответы на вопрос(1)

Ваш ответ на вопрос