Доступ к формам SmartArt, когда SmartArt находится внутри метки-заполнителя (PowerPoint 2007) - PullRequest
2 голосов
/ 24 августа 2010

Мне нужно пройти через каждую форму smart-art в PowerPoint 2007. Когда shape.Type=msoSmartArt, тогда я мог бы просто пройти через формы в shape.GroupItems.

Однако, когда shape.Type == msoPlaceholder && shape.PlaceholderFormat.ContainedType==msoSmartArt затем shape.GroupItems пусто.Как я могу получить доступ к формам Smart Art в таком случае?


Я привык думать, что VBA и C # VSTO в основном одинаковы.

Что ж, здесь есть разница.Я попробовал код Отаку в реальном VBA, и он действительно, кажется, работает (извините за путаницу, Отаку).

Тем не менее, моя программа находится в C # VSTO, и:

foreach (Shape slideShape in pres.Slides[1].Shapes)
{
  if (slideShape.Type != MsoShapeType.msoSmartArt &&   !(slideShape.Type == MsoShapeType.msoPlaceholder &&  slideShape.PlaceholderFormat.ContainedType==MsoShapeType.msoSmartArt))
 continue;

 GroupShapes shapes=slideShape.GroupItems;
 Debug.WriteLine(shapes.Count);
}

Производит: shapes.Count=0 (когда типом фигуры является метка-заполнитель, а внутренним типом является SmartArt).

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 24 августа 2010

Используйте GroupShapes, например:

Sub GetSAfromPlaceholder()
    Dim ap As Presentation: Set ap = ActivePresentation
    Dim sl As Slide: Set sl = ap.Slides(2)
    Dim sh As Shape: Set sh = sl.Shapes(2)
    Dim gsh As GroupShapes: Set gsh = sh.GroupItems
    If sh.Type = msoPlaceholder Then
        If sh.PlaceholderFormat.ContainedType = msoSmartArt Then
        Debug.Print "SmartArt Shape Count: " & gsh.Count
          For i = 1 To gsh.Count
            If gsh(i).TextFrame.HasText Then
                Debug.Print gsh(i).TextFrame.TextRange.Text
            End If
            Next
        End If
    End If
End Sub
0 голосов
/ 05 октября 2010

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

...