Как получить все формы в презентации PowerPoint? - PullRequest
0 голосов
/ 25 июня 2019

Мне нужно получить все фигуры в активной презентации со всех слайдов, включая фигуры в сгруппированных элементах в C #.

Мне нужны все фигуры, возвращенные в List или Array (Shape).

enter image description here

1 Ответ

1 голос
/ 25 июня 2019

Вы можете перечислить формы слайда через свойство 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;
        }
    }
}

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

...