Текст C# в форме Powerpoint не обнаружен

Я пытаюсь извлечь весь текст в каждом слайде файла PowerPoint. По какой-то причине я получаю только некоторые тексты, а не все. Я перебираю все фигуры на слайде и проверяю текстовые и таблицы. Но некоторые слайды с текстом ничего не распечатают.

Вот сценарий слайда, на котором напечатан только заголовок и никакой другой текст.

Код

foreach (PowerPoint.Slide _slide in pptPresentation.Slides) {
    foreach(PowerPoint.Shape _shape in _slide.Shapes) {
        //check for textframes
        if (_shape.HasTextFrame == MsoTriState.msoTrue) {
            var textFrame = _shape.TextFrame;

            if (textFrame.HasText == MsoTriState.msoTrue) {
                var textRange = textFrame.TextRange;
                PrintAllParagraphs(textRange);
            } 
        }

        //check for tables
        if(_shape.HasTable == MsoTriState.msoTrue) {
            var slideTable = _shape.Table;
            int rowCount = slideTable.Rows.Count;
            int colCount = slideTable.Columns.Count;

            for(int y = 1; y <= rowCount; y++) {
                for(int x = 1; x <= colCount; x++) {
                    var tRange = slideTable.Cell(y, x).Shape.TextFrame.TextRange;
                    PrintAllParagraphs(tRange);
                }
            }
        }
    } //loop shapes
} //loop slides

функция печати

public void PrintAllParagraphs(PowerPoint.TextRange textRange) {
    for (int i = 1; i <= textRange.Paragraphs().Count; i++) {
        PowerPoint.BulletFormat bulletFormat = textRange.Paragraphs(i).ParagraphFormat.Bullet;
        Console.WriteLine( (bulletFormat.Type == PowerPoint.PpBulletType.ppBulletNone) ? textRange.Paragraphs(i).Text.ToString() : "* " + textRange.Paragraphs(i).Text.ToString());
    }
}

Есть ли другие вещи, которые я должен проверять в форме слайда? Любая помощь будет оценена. Благодарю.

1 ответ

Решение

Хорошо, оказывается, что это SmartArt, и именно поэтому проверка Shapes/Tables не обнаружила его.

Все, что мне нужно было сделать, - это зациклить узлы в Smart Art и извлечь текст из TextRange. Я заметил, что текст отделяется "\r", поэтому, разделив его, я смог получить правильный вывод из него.

//check for SmartArt
if(_shape.HasSmartArt == MsoTriState.msoTrue) {
    foreach( SmartArtNode node in _shape.SmartArt.AllNodes) {
        var txtRange = node.TextFrame2.TextRange;
        var txt = txtRange.Paragraphs.Text.Split(new string[] { "\r" }, StringSplitOptions.None);

        foreach(string line in txt) 
            Console.WriteLine(line);
    }
}
Другие вопросы по тегам