Вы можете перечислить формы слайда через свойство 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;
}
}
}
Обратите внимание, что этот тип рекурсии обходится дорого, и, возможно, было бы целесообразно преобразовать вышеуказанный метод в нерекурсивный .