2015-05-25 4 views
2

Я пытался читать .ppt файлов за последние 3 дня. Я много искал в Интернете, и я придумал разные фрагменты исходного кода, но ничего не было идеально. И теперь я пробовал этот код, и он не печатает «Check» из-за некоторой неопределенной проблемы в « Foreach» и выдает исключение. Пожалуйста, направляйте меня. Мне это нужно плохо.Powerpoint to Text C# - Microsoft.Interop

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); 
     } 

Метательное исключение

System.ArgumentException: Указанное значение выходит за пределы диапазона. в Microsoft.Office.Interop.PowerPoint.TextFrame.get_TextRange() at KareneParser.Program.ppt2txt (источник строки) в c: \ Users \ Shahmeer \ Desktop \ Новая папка (2) \ KareneParser \ Program.cs: строка 323 в KareneParser.Program.Main (String [] арг) в C: \ Users \ Shahmeer \ Desktop \ Новая папка (2) \ KareneParser \ Program.cs: линия 150

Line 323, на которой ловится исключение

pps += shape.TextFrame.TextRange.Text.ToString(); 

Заранее благодарен.

+0

Вы не указали исключение. Похоже, вы отправили строку, в которой происходит исключение. Не могли бы вы отредактировать свое сообщение с типом исключения и сообщением об исключении? –

+0

Я редактировал свой вопрос и добавлял исключение. Спасибо, что ответили так быстро. – user3057437

ответ

0

Похоже, что вам нужно проверить объекты формы, чтобы увидеть, если у них есть TextFrame и текст настоящее.

В вашем вложенном цикле Еогеаспа попробовать это:

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 doc, которые не имеют текста, поэтому исключение вне диапазона. Я добавил, чтобы убедиться, что он добавляет только текст в строку pps, если у него есть текст.

0

Не все формы имеют текст. Линии и т. Д. Также являются фигурами. Проверка на HasText первым:

foreach (Microsoft.Office.Interop.PowerPoint.Shape shape in slide.Shapes) 
{ 
    if(shape.TextFrame.HasText) 
    { 
    pps += shape.TextFrame.TextRange.Text; 
    } 
} 
+0

Большое спасибо. Теперь это безупречно. Я действительно счастлив.. :-) – user3057437