我需要在PowerPoint 2007中浏览智能艺术的每个形状。
当shape.Type=msoSmartArt
然后我可以简单地浏览shape.GroupItems中的形状。
然而,当shape.Type == msoPlaceholder && shape.PlaceholderFormat.ContainedType==msoSmartArt
那么shape.GroupItems
是空的。在这种情况下如何访问Smart Art形状?
我曾经认为VBA和C#VSTO基本相同。
嗯 - 这里有区别。我在实际的VBA中尝试过Otaku的代码,它确实似乎有效(对于混淆,Otaku而言)。
但是,我的程序在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时)。
有什么想法吗?
答案 0 :(得分:3)
使用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
答案 1 :(得分:0)
我使用的解决方法是复制SmartArt并将其粘贴回来。 粘贴的SmartArt现在在其GroupItems中具有所有形状。 使用这些后,我删除粘贴的形状。