2016-07-28 3 views
0

私はいくつかの見出しを含む大きな単語の文書を持っています。これらの見出しには、子として1つの表がそれぞれあります。 (スクリーンショットに示されている)段落の下のテキストをプログラムで取得

enter image description here

そこで私は、マイクロソフトInterop.Wordライブラリを使用。私のコードはこのように見えます。私はどのように見出しの段落の子供たちを得ることができますか?おそらくこれを行うためのより良い方法があります。

Application word = new Application(); 
Document doc = new Document(); 
object missing = System.Type.Missing; 
doc = word.Documents.Open(ref m_FileName, 
     ref missing, ref missing, ref missing, ref missing, 
     ref missing, ref missing, ref missing, ref missing, 
     ref missing, ref missing, ref missing, ref missing, 
     ref missing, ref missing, ref missing); 

foreach (Paragraph paragraph in doc.Paragraphs) 
{ 
    Style style = paragraph.get_Style() as Style; 
    string text = paragraph.Range.Text; 
    paragraph.Range.Tables // does not get the table under the paragraph 
} 
+0

A Word文書は、その内部構造ではなく、ブロックレベルの順に階層的ではありません あなたの場合は、見出しの後に続く段落にアクセスする必要があることを意味します(あるいは、ドキュメントのすべてのテーブルを 'doc .Tables') –

+0

脇に:.NET 4以降、コードをもっとコンパクトに書くことができるので、欠落しているパラメータをすべて指定して、 'ref'を使う必要はありません。単に' word.Document.Open (m_FileName); ' –

+0

@dirk vollmarしかし、私はテーブルのキーとして見出しが必要です。これを行う方法が必要です。または私は間違っていますか? –

答えて

0

範囲を使用しています。次のタイトル(またはあなたが章の最後として使用との間でコンテンツを取得することができます何かを見つける、最初のタイトルを検索:

Range r1 = doc.Content; 
Range r2 = doc.Content; 
r1.Find.Execute("Heading 1"); 
r2.Find.Execute("Heading 2"); 

Range chapter = doc.Range(r1.Start, r2.Start); 
//Console.WriteLine(chapter.Text); 

foreach (Table t in chapter.Tables) 
{ 
    foreach(Row r in t.Rows) 
    { 
     foreach (Cell c in r.Cells) 
     { 
      //Console.WriteLine(c.Range.Text); 
     } 
    } 
} 
+0

これは良い考えのようです。私はそれを考えなかった。 –

関連する問題