Форматирование разделов TextRange или TextRange2 в PowerPoint.Interop C# - PullRequest
1 голос
/ 19 марта 2020

Я хотел бы добавить форматированный текст в TextBox на слайде PowerPoint.

Я использую. Net 4.7.2 с Microsoft.Office.Interop.PowerPoint

Обзор

// Initialization of the Application
public PresentationGenerator () {
  pptApplication = new Application ();
}

// Creating a new document based on a teplate.
Presentation pptPresentation = generator.pptApplication.Presentations.Open (templatePath, MsoTriState.msoFalse, MsoTriState.msoTrue, showWindow);


// Setting a slide and editing the text works perfectly fine with this
Slide currentSlide;

currentSlide = pptPresentation.Slides[1];
currentSlide.Shapes.Title.TextFrame.TextRange.Text = "Wonderful Title";
currentSlide.Shapes[3].TextFrame.TextRange.Text = "Great TextBox";

Это моя установка для установки текста на слайдах.

Однако я хотел бы добавить текст к одной из моих фигур, используя al oop и настройку макета в зависимости от свойства. Представьте себе следующий массив

customParagraphs = [
    {
        text:"example heading",
        type:"title"
    },{
        text:"example normal text",
        type:"text"
    }]

. Я могу l oop над этим списком, добавить текст в конец TextRange2, используя .insertAfter(text), и попытаться установить размер шрифта для той части текста, которая я добавил.

TextRange2 textrange = currentSlide.Shapes[3].TextFrame2.TextRange

foreach(var paragraph in customParagraphs){
    TextRange2 paragraphRange = textrange.Paragraphs.insertAfter(paragraph.text)
    if(paragraph.type == "title"){
        paragraphRange.Font.Size = 24.0F;
    }
}

Это успешно добавит текст и изменит размер шрифта, если type is title. Однако это изменит размер шрифта для всего текстового диапазона!

Ссылка, возвращаемая .insertAfter(), похоже, ссылается на экземпляр TextRange2, а не на мой недавно добавленный абзац .

Мои вопросы

Есть ли способ изменить размер шрифта и другие атрибуты строки, абзаца или слова внутри элемента TextRange или TextRange2?

Есть ли лучший способ добавить текст к элементу TextRange или TextRange2, чем .insertAfter, который предпочтительно возвращает ссылку только на тот текст, который я добавил?

...