未检测到Powerpoint形状的C#文本
我正在尝试提取powerpoint文件每张幻灯片中的所有文本。出于某种原因,我只收到了一些文本,而不是全部。我循环浏览幻灯片中的所有形状,检查文本框和表格。但是,有些带有文本的幻灯片不会打印任何内容 这是一张只打印标题而没有其他文字的幻灯片 代码未检测到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) {
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);
}
}