Можно ли обнаружить определенные строки, которые подчеркнуты, выделены курсивом или выделены жирным шрифтом из Powerpoint с помощью C #? - PullRequest
0 голосов
/ 12 июня 2019

У меня есть слайд PowerPoint с 1 текстовым фреймом с несколькими строками текста.Если строка 2 выделена жирным шрифтом, как я могу это обнаружить?

Sentence one 
Sentence two -this one is italic for example
Sentence three
Sentence four

Вот моя попытка кода сделать это, я понял, что из-за того факта, что текст из powerpoint находится в одном TextFrame.TextRange, я долженпопробуйте разделить его на части, чтобы проверить отдельные строки, где я хочу определить стиль шрифта.Поэтому я попытался сохранить начальную и конечную позиции каждой строки в объекте, а затем попробовать TextRange.Characters (), чтобы получить отдельные строки и проверить их стиль оттуда.но все, что я получаю, это msoTriStateMixed и, таким образом, дает мне неправильный результат.

Application pptApplication = new Application();
Presentation pptPresentation = pptApplication.Presentations.Open(filename, MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoFalse);
foreach (Slide _slide in pptPresentation.Slides) {
    foreach (Microsoft.Office.Interop.PowerPoint.Shape _shape in _slide.Shapes) {
        if(_shape.HasTextFrame == MsoTriState.msoTrue) {
            var textFrame = _shape.TextFrame;
            if(textFrame.HasText == MsoTriState.msoTrue) {
                var textRange = textFrame.TextRange;

                int startingPoint = 1;
                string[] lines = textRange.Text.ToString().Split(
                    new[] { "\n", "\r", "\r\n" },
                    StringSplitOptions.None
                );

                List<Line> LineList = new List<Line>();
                Line newLine = new Line();
                foreach(string x in lines) {
                    newLine.startingPos = startingPoint;
                    newLine.endingPos = startingPoint + x.Length;
                    LineList.add(newLine);
                    startingPoint += x.Length;
                }

                foreach(Line L in LineList) {
                    if (textRange.Characters(L.startingPos, L.endingPos - 1).Font.Bold == MsoTriState.msoTrue)
                        Console.WriteLine("bolded = true");
                    else
                        Console.WriteLine("bolded = false");
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...