Определение формы на слайде в PowerPoint VSTO API с использованием идентификатора / заголовка / чего бы то ни было - PullRequest
1 голос
/ 25 января 2012

Я пишу надстройку PowerPoint 2010.В двух словах, это то, что я делаю:

  1. Создание шаблона PowerPoint (* .potx) с большим количеством определенных слайдов макета
  2. Плагин записи, который автоматизирует некоторые распространенные задачи, которые выполняютсяпосле презентации.Одним из них является вставка слайда повестки дня (определенного как макет в SlideMaster) в качестве первого слайда в каждом разделе.
  3. После вставки слайда повестки дня (это было довольно просто с: newAgendaSlide.MoveToSectionStart(sectionNumber)), я должен установитьтекст двух объектов Shape (один в верхней части слайда, а второй расположен в нижнем / правом углу - давайте назовем верхний и нижний колонтитулы) для имени текущего раздела PowerPoint на каждом слайде в текущем разделе.

И теперь я знаю, как получить заголовок раздела:

Presentation.SectionProperties.Name(sectionNumber)

, и я знаю, как перебирать Shape объекты, которые находятся на объекте Slide.Но я не знаю, как получить доступ Форма .Я не могу быть уверен, что, например, моей фигуре в верхнем / нижнем колонтитуле будет присвоено значение Id?Есть ли способ установить какое-либо свойство в Shape's Shape, а затем быть полностью уверенным, что одно и то же свойство будет иметь такое же значение на слайде?

Чтобы подвести итог (и, надеюсь, прояснить это): Iхотел бы создать слайд макета (в SlideMaster) с x числом фигур и иметь возможность доступа к конкретному слайду на реальном слайде презентации.

1 Ответ

3 голосов
/ 25 января 2012

Я бы, вероятно, вставил бы формы верхнего / нижнего колонтитула сам, а не использовал бы (плохо сломанные) нижние колонтитулы PPT.

Я бы использовал теги, чтобы определить формы, которые вы добавили. Когда пришло время манипулировать одним из них, посмотрите, есть ли он на слайде (тестирование на добавленные вами теги), и если он не найден, добавьте свой. Пример AirVBA:

For each oSh in oSlide.Shapes
  If Len(oSh.Tags "MyShape") > 0 Then ' its' your footer
    Set oFooter = oSh
  End If

  If oFooter is Nothing then  ' not there, add one:
    Set oFooter = ... add the shape here
    ' add the tags
    oFooter.Tags.Add "MyShape", "Footer"
    With oFooter
      ' format it, add text, whatever
    End with
  End if
Next
...