Powerpoint to Text C# - Microsoft.Interop
本文关键字:Microsoft Interop to Text Powerpoint | 更新日期: 2023-09-27 17:50:46
我从过去3天一直在尝试阅读.ppt文件。我在网上搜索了很多,我想出了不同的源代码片段,但没有什么是完美的。现在我尝试了这段代码,它没有打印"Check4",因为在"Foreach"语句中存在一些未识别的问题,并抛出异常。请引导我。我非常需要它。
public static void ppt2txt (String source)
{
string fileName = System.IO.Path.GetFileNameWithoutExtension(source);
string filePath = System.IO.Path.GetDirectoryName(source);
Console.Write("Check1");
Application pa = new Microsoft.Office.Interop.PowerPoint.ApplicationClass ();
Microsoft.Office.Interop.PowerPoint.Presentation pp = pa.Presentations.Open (source,
Microsoft.Office.Core.MsoTriState.msoTrue,
Microsoft.Office.Core.MsoTriState.msoFalse,
Microsoft.Office.Core.MsoTriState.msoFalse);
Console.Write("Check2");
String pps = "";
Console.Write("Check3");
foreach (Microsoft.Office.Interop.PowerPoint.Slide slide in pp.Slides)
{
foreach (Microsoft.Office.Interop.PowerPoint.Shape shape in slide.Shapes)
pps += shape.TextFrame.TextRange.Text.ToString ();
}
Console.Write("Check4");
Console.WriteLine(pps);
}
抛出异常
系统。ArgumentException:指定的值超出范围。在Microsoft.Office.Interop.PowerPoint.TextFrame.get_TextRange ()在KareneParser.Program。' users ' shahmeer ' desktop '新文件夹(2)'KareneParser'Program.cs:第323行在KareneParser.Program。Main(String[] args) in c:' users ' shahmeer ' desktop '新文件夹(2)'KareneParser'Program.cs:line 150
捕获异常的第323行
pps += shape.TextFrame.TextRange.Text.ToString ();
看起来你需要检查你的形状对象,看看他们是否有TextFrame和Text存在。
在嵌套的foreach循环中试试:
foreach (Microsoft.Office.Interop.PowerPoint.Slide slide in pp.Slides)
{
foreach (Microsoft.Office.Interop.PowerPoint.Shape shape in slide.Shapes)
{
if(shape.HasTextFrame == Microsoft.Office.Core.MsoTriState.msoTrue)
{
var textFrame = shape.TextFrame;
if(textFrame.HasText == Microsoft.Office.Core.MsoTriState.msoTrue)
{
var textRange = textFrame.TextRange;
pps += textRange.Text.ToString ();
}
}
}
}
这当然是未经测试在我的部分,它看起来对我来说,虽然你的foreach循环,你试图访问一些形状在powerpoint文档中没有文本存在,因此超出范围的例外。我已经添加了检查,以确保它只追加文本到你的pps字符串,如果它有文本存在。
不是所有的形状都有文字。线条等也是形状。先检查HasText:
foreach (Microsoft.Office.Interop.PowerPoint.Shape shape in slide.Shapes)
{
if(shape.TextFrame.HasText)
{
pps += shape.TextFrame.TextRange.Text;
}
}