Как определить, что заполнитель используется? - PullRequest
4 голосов
/ 05 июля 2010

С учетом слайда, как можно выяснить, используются ли в PowerPoint все заполнители макета слайда?

Можно ли предотвратить автоматическое использование заполнителя при добавлении изображения, если этот заполнитель не используется?

Ответы [ 2 ]

1 голос
/ 30 января 2012

Более элегантное решение, позволяющее выяснить, содержит ли заполнитель элемент или нет, и которое является общим для всех типов:

if (selectedSlide.Shapes.Placeholders[i].PlaceholderFormat.ContainedType != Microsoft.Office.Core.MsoShapeType.msoAutoShape)

Заполнитель имеет значение ContainedType msoAutoShape, если внутри заполнителя ничего не размещено. Например, при вставке изображения в заполнитель тип меняется на тип элемента, в данном случае msoPicture.

Office автоматически добавляет элементы в первый доступный заполнитель (добавляется первым в основной файл), или для изображений приоритет имеет ppPlaceholderPicture.

1 голос
/ 06 июля 2010

Вам нужно было бы перебрать все заполнители на слайде, определить тип каждого из них, а затем проверить, заполнен ли он ожидаемым форматом. Их 18 PpPlaceholderType, поэтому вам придется настроить их все, но ниже приведен пример того, что вы можете сделать, чтобы проверить, используется ли заполнитель.

Sub CheckPlaceholders()
Dim ap As Presentation: Set ap = ActivePresentation
Dim sl As Slide: Set sl = ap.Slides(2)
Dim shs As Shapes: Set shs = sl.Shapes
Dim ph As Placeholders: Set ph = shs.Placeholders
Dim p As Shape
    For Each p In ph
        Select Case p.Type
        Case PpPlaceholderType.ppPlaceholderHeader
            If p.TextFrame.HasText Then
                Debug.Print "This Placeholder is in use"
            End If
        Case PpPlaceholderType.ppPlaceholderChart
            If p.HasChart Then
                Debug.Print "This Placeholder is in use"
            End If
        End Select
    Next
End Sub

Чтобы вставить, скажем, изображение, чтобы оно не попало в заполнитель, я нашел единственный способ создать цикл для добавления изображений, пока одно из них не вышло из заполнителя, а затем удалить уже вставленные .

Sub AddPicture()
    Dim pic As String
    pic = "C:\Users\Me\Desktop\beigeplum.jpg"
    Dim ap As Presentation: Set ap = ActivePresentation
    Dim sl As Slide: Set sl = ap.Slides(1)
    Dim sh As Shape

    Do
        Set sh = sl.Shapes.AddPicture(pic, msoFalse, msoTrue, 1, 1)
        sh.Tags.Add "MYPICTURE", 0
    Loop Until sh.Type <> 14

    Dim p As Shape
    For Each p In sl.Shapes
        If p.Type = 14 Then
            If p.Tags.count > 0 Then
                If p.Tags.Name(1) = "MYPICTURE" Then
                    p.Delete
                End If
            End If
        End If
    Next
End Sub
...