Как я могу изменить цвет шрифта TextRange в PowerPoint с С#?

Я создал презентацию PowerPoint с помощью C#:

PowerPoint.Application powerpointApplication;
PowerPoint.Presentation pptPresentation;
PowerPoint.Slide Slide;

// Create an instance of PowerPoint.
powerpointApplication = new PowerPoint.ApplicationClass();

// Create a PowerPoint presentation.
pptPresentation = powerpointApplication.Presentations.Add(
Microsoft.Office.Core.MsoTriState.msoTrue);


// Create empty slide
Slide = pptPresentation.Slides.Add(1, PowerPoint.PpSlideLayout.ppLayoutBlank);

TextRange objTextRng = objSlide.Shapes[1].TextFrame.TextRange;
objTextRng.Text = "Remote sensing calendar 1";
objTextRng.Font.Name = "Comic Sans MS";
objTextRng.Font.Size = 48;
// TODO: change color
// objTextRng.Font.Color 



// Save presentation
pptPresentation.SaveAs( BasePath + "result\\2_example.ppt", 
                       PowerPoint.PpSaveAsFileType.ppSaveAsDefault, 
                       MsoTriState.msoTrue // TODO: что за параметр???
                      );
pptPresentation.Close();

Теперь, как я могу изменить цвет шрифта для objTextRng?


person pesten    schedule 09.03.2011    source источник


Ответы (4)


Следующий код установит красный цвет шрифта:

objTextRng.Font.Color.RGB = Color.Red.ToArgb();

Если вы хотите указать другой цвет, вы можете использовать один из других предустановленных цветов. или укажите собственные значения RGB с помощью метода Color.FromArgb.

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

person Cody Gray    schedule 09.03.2011
comment
Фактически, это устанавливает его в синий цвет, несмотря на название* этого свойства, PowerPoint интерпретирует цвета в формате BGR. Самый простой (и наименее элегантный) способ установить красный цвет шрифта — просто указать цвет в шестнадцатеричном формате (поменяв местами байты R и B): range.Font.Color.RGB = 0x0000FF; -- аналогично, синий будет range.Font.Color.RGB = 0xFF0000; и т. д. (*: it является на самом деле форматом RGB, но с обратным порядком байтов, то есть байты хранятся справа налево, а не слева направо.) - person BrainSlugs83; 25.08.2016

Используйте это для PPTX 2007

    private int BGR(Color color)
    {
        // PowerPoint's color codes seem to be reversed (i.e., BGR) not RGB
        //      0x0000FF    produces RED not BLUE
        //      0xFF0000    produces BLUE not RED
        // so we have to produce the color "in reverse"

        int iColor = color.R + 0xFF * color.G + 0xFFFF * color.B;

        return iColor;
    }

Например

    shape.TextFrame.TextRange.Font.Color.RGB = BGR(Color.Red);  
person VVX    schedule 03.01.2012
comment
Кажется, это все еще имеет место в Powerpoint 2013 (я думаю, это тот же формат). Довольно глупо, что когда вы устанавливаете Color.RGB на красный, вы получаете синий без этой функции. :) - person Thomas Glaser; 01.04.2016

Я думаю, что эта страница MSDN объясняет это.

EDIT: Но это только объясняет, как это сделать в VBScript. Вы можете видеть, что объект TextRange имеет свойство Font. Это возвращает объект Font, описанный здесь. Эти ресурсы показывают, что у вас есть доступ к свойству RGB. Вы можете установить его, как сказал вам Коди. Если вам нужна дополнительная информация, обратитесь к разделу MSDN, я просто указываю вам.

person Philippe Lavoie    schedule 09.03.2011
comment
Вы, безусловно, можете почерпнуть объяснение с этой страницы, но там речь идет об объекте DropCap, а не об объекте TextRange, а пример кода представлен на языке VB 6.0/VBScript, который нелегко перевести на C#. В частности, в C# нет функции RGB. - person Cody Gray; 09.03.2011
comment
Согласен, просто не хотел ставить только ссылку. Иногда это раздражает, поэтому я просто скопировал пример кода. - person Philippe Lavoie; 09.03.2011
comment
Опять же, проблема в том, что пример кода не будет работать на C#, так как вопрос помечен тегом. Там нет функции RGB, вы должны сделать это, как предлагает мой ответ (что является предпочтительным способом), или импортировать пространство имен Microsoft.VisualBasic для использования функции Information.RGB. - person Cody Gray; 09.03.2011
comment
@you, ребята: эта ссылка для Publisher 2010. Не то же самое, что PowerPoint. - person Todd Main; 09.03.2011

objTextRng.Font.Color.RGB = System.Drawing.ColorTranslator.ToOl(System.Drawing.Color.Blue);

person mxrk0    schedule 25.09.2013