Как узнать цвет фона документа MS Word, используя C # - PullRequest
1 голос
/ 21 сентября 2010

Я использую C # office ( word ) для автоматизации Microsoft Office 12.0 Object Library .И я открыл файл «1.doc», и мне нужно проверить, имеет ли этот файл цвет фона или нет.

Примечание. Я имею в виду цвет фона, применяемый следующими шагами:

  • Откройте MS Word 2003 и откройте документ.
  • Перейдите в: Формат Меню -> Фон и выберите цвет.

А вот что у меня в C #:

Object oMissing = System.Reflection.Missing.Value;

        //OBJECTS OF FALSE AND TRUE
        Object oTrue = true;
        Object oFalse = false;
        Object fileName = "c:\\1.doc";

        //CREATING OBJECTS OF WORD AND DOCUMENT
        Word.Application oWord = new Word.Application();
        Word.Document oWordDoc = new Word.Document();

        //MAKING THE APPLICATION VISIBLE
        oWord.Visible = true;

        //ADDING A NEW DOCUMENT TO THE APPLICATION
        oWordDoc = oWord.Documents.Open(
            ref fileName, ref oMissing, ref oFalse, ref oMissing,
            ref oMissing, ref oMissing, ref oMissing, ref oMissing,
            ref oMissing, ref oMissing, ref oMissing, ref oMissing,
            ref oTrue, ref oMissing, ref oMissing, ref oMissing);
        Console.WriteLine(oWordDoc.Background.Fill.ForeColor.RGB);
        Console.WriteLine(oWordDoc.Background.Fill.BackColor.RGB);

Я не знаю, представляют ли ForeColor или BackColor нужный мне цвет, я пытался выбирать разные цвета фона и выполнял приведенный выше код и каждый разЯ получил другое целочисленное значение, например (10092543, 255 для красного, ....), но это не имеет смысла, и BackColor никогда не изменяется и не фиксируется на значении (16777215).Большое спасибо.

1 Ответ

2 голосов
/ 21 сентября 2010

Вы на правильном пути. Фон страницы действительно является цветом foreground объекта Background. Различные значения, которые вы видите, соответствуют целочисленному представлению значений цвета RGB.

Если вас интересуют различные цветовые компоненты, вы можете использовать следующий код:

Color color = Color.FromArgb(oWordDoc.Background.Fill.ForeColor.RGB);
int red = color.R;
int green = color.G;
int blue = color.B;

Обновление

Цвет, используемый объектной моделью Office, похоже, использует внутренний формат, отличный от System.Drawing.Color, поэтому каналы могут перепутаться при использовании приведенного выше примера кода (я забыл проверить фактический формат Word.ColorFormat.RGB).

Вы всегда можете получить разные цветовые каналы самостоятельно, используя следующий код:

int wordColor = oWordDoc.Background.Fill.ForeColor.RGB;
int channel1 = (int)((wordColor >> 0x10) & 0xffL);
int channel2 = (int)((wordColor >> 0x8) & 0xffL);
int channel3 = (int)(wordColor & 0xffL);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...