2012-12-31 65 views
0

我打開一個docx,這是由word2010編輯,在這個文檔中,我有一些形狀使用group.but當我得到subshape,我無法得到subshape文本。 這是我的code.can有人告訴我爲什麼?謝謝。Word2010 Shapes GroupItems無法獲得TextFrame2.TextRange

Word.Application woradApp = new Word.Application(); 
      Word.Document doc = woradApp.Documents.Open(@"D:\ABC\a.docx"); 
      Word.Shapes Shapes =doc.Shapes; 
      List<Word.Shape> list = Shapes.Cast<Word.Shape>().ToList<Word.Shape>(); 
      foreach (Word.Shape shape in list) 
      { 
       if (shape.Type == MsoShapeType.msoGroup) 
       { 
        Word.GroupShapes dyShapes = shape.GroupItems;     
        foreach (dynamic item in dyShapes) 
        { 
         var range = item.TextFrame2.TextRange; 
        } 
       } 
      }  

的「item.TextFrame2.TextRange.Text」代碼給一個例外,「TextRange的」爲空,這應該是有文字,在那裏可以得到的文本?

回答

0

請告訴你什麼是var range,是Range對象還是TextRange對象?我認爲這只是一個variant array

這裏有一些步驟來嘗試:

  1. 確保每個形狀支持TextFrame2財產
  2. Ungroupshapes第一
  3. 循環遍歷形狀,你這樣做了檢查所需的值
  4. 如果TextRange沒有價值,請務必處理null ......這是您的情況最有可能的罪魁禍首。
  5. 分組形狀。

    的foreach(在dyShapes動態項) { 如果不是ISNULL(item.TextFrame2.TextRange.Characters.Text) { 變種範圍= item.TextFrame2.TextRange.Characters.Text; }}

首先,你可以在你當前的代碼處理Null嘗試。如果失敗,請嘗試使用ungrouping建議。

+0

嗨bonCodigo,謝謝你的回答。但我仍然無法通過你的方法獲取文本。 – Wendy369

+0

嗨bonCodigo, 首先使用「item.TextFrame2.TextRange」給出一個異常,即「TextRange \t {System.Reflection.TargetInvocationException:調用的目標發生了異常。---> System.ArgumentException:指定的值超出了範圍「。我使用」快速查看「,但無法找到任何文本信息。 第二次使用「shape.UnGroup()」,得到ShapeRange,但仍然找不到任何TextRange可以使用的。 該文檔是由Word2010編輯並保存爲「Docx」。如果我使用word2003的上述代碼,一切都可以。 現在我不知道該怎麼辦,可以給我一些建議嗎?謝謝。 – Wendy369

+0

Wendy369請不要在這裏輸入中文。本網站使用英文。而且你沒有提到你的代碼在2003年工作,並在2010年最初失敗。我們可以確認你的代碼在2003年工作嗎? – bonCodigo