如何在PowerPoint演示文稿中获得所有形状?

时间:2019-06-25 16:05:49

标签: c# vsto powerpoint office-interop

我需要从所有幻灯片中获得活动演示中的所有形状,包括C#中分组项目中的形状。

我需要在List或Array(Shape)中返回的所有形状。

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以通过Shapes属性枚举幻灯片的形状。同样,您可以通过GroupItems属性枚举子形状(仅适用于msoGroup形状类型)。放在一起:

public static IEnumerable<Shape> EnumerateShapes(Presentation presentation)
{
    return presentation.Slides.Cast<Slide>().SelectMany(slide =>
        EnumerateShapes(slide.Shapes.Cast<Shape>()));
}

public static IEnumerable<Shape> EnumerateShapes(IEnumerable<Shape> shapes)
{
    foreach (Shape shape in shapes)
    {
        yield return shape;
        if (shape.Type == Microsoft.Office.Core.MsoShapeType.msoGroup)
        {
            foreach (var subShape in EnumerateShapes(shape.GroupItems.Cast<Shape>()))
                yield return subShape;
        }
    }
}

请注意,这种递归是有代价的,将上述方法转换为non-recursive one也许是明智的。