未检测到Powerpoint形状的C#文本

未检测到Powerpoint形状的C#文本,c#,powerpoint,powerpoint-interop,C#,Powerpoint,Powerpoint Interop,我正在尝试提取powerpoint文件每张幻灯片中的所有文本。出于某种原因,我只收到了一些文本,而不是全部。我循环浏览幻灯片中的所有形状,检查文本框和表格。但是,有些带有文本的幻灯片不会打印任何内容 这是一张只打印标题而没有其他文字的幻灯片 代码 foreach (PowerPoint.Slide _slide in pptPresentation.Slides) { foreach(PowerPoint.Shape _shape in _slide.Shapes) {

我正在尝试提取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
foreach(PowerPoint.Slide\u pptPresentation.Slides中的幻灯片){
foreach(PowerPoint.Shape\u幻灯片中的Shape.Shapes){
//检查文本框
如果(_shape.HasTextFrame==MsoTriState.msoTrue){
var textFrame=_shape.textFrame;
if(textFrame.HasText==MsoTriState.msoTrue){
var textRange=textFrame.textRange;
打印所有段落(文本范围);
} 
}
//查表
if(_shape.HasTable==MsoTriState.msoTrue){
var slideTable=\u shape.Table;
int rowCount=slideTable.Rows.Count;
int colCount=slideTable.Columns.Count;

对于(int y=1;y好的,这是一个SmartArt,这就是为什么检查形状/表格没有检测到它的原因

我所要做的就是在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);
    }
}

如果幻灯片无法提取文本,形状设置是否不同,是否有溢出等。是的,事实上,我刚刚发现这是一个包含文本的SmartArt。我现在可以提取一些文本,但无法获取所有文本。它会给我每个文本框的最后一行。因此,在上面的截图示例我会得到“文本”和“文本”。与一小时前相比,我肯定离得到我想要的东西更近了。我找到了@Digitalsa1nt,将在下面发布答案。
//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);
    }
}