• 締切済み

C#でWord文書の本文を検索

Visual C#でプログラミングをしています。 Wordファイルの本文の検索をしたいのですが どうすればいいのか分かりません。 完成のイメージは 1.TextBoxに検索する単語を入力し、ボタンを押す 2.指定したパスにあるWord文書の本文を検索 3.検索語があるかどうかを返す というものです。 .txtの本文を検索する方法は見つかったのですが Word文書を調べる方はあるのでしょうか? どなたか分かる方がおられましたら お教え頂きたいです。よろしくお願いします。

みんなの回答

回答No.1

Wordのファイルの内容さえ取得できれば,他はテキストファイルの場合と同じです。 なので,Wordのファイルの本文の取得方法について書きます。 # 他にもヘッダ・フッタやシェイプなど,考慮すべき事はありますが……。 Wordのファイルの本文の取得は, 1. 参照設定でMicrosoft Wordへの参照を追加する (COMタブ) 2. Applicationをnewする (バージョン,IAかPIAかで名前空間の違いあり) 3. 2.で作ったApplicationオブジェクトからDocumentsを取得する 4. 3.で取得したDocumentsオブジェクトのOpenメソッドを呼び出して,Documentを取得する 5. 4.で取得したDocumentオブジェクトのRangeメソッドを,引数2つともにSystem.Reflection.Missing.Valueで呼び出して,Rangeを取得する 6. 5.で取得したRangeオブジェクトのTextプロパティを参照して,本文を取得する 7. 5.で取得したRangeオブジェクトを引数にして,System.Runtime.InteropServices.Marshal.ReleaseComObjectメソッドを呼び出して,Rangeオブジェクトを解放する 8. 4.で取得したDocumentオブジェクトのCloseメソッドを呼び出して,ドキュメントを閉じる 9. 4.で取得したDocumentオブジェクトを引数にして,System.Runtime.InteropServices.Marshal.ReleaseComObjectメソッドを呼び出して,Documentオブジェクトを解放する 10. 3.で取得したDocumentsオブジェクトを引数にして,System.Runtime.InteropServices.Marshal.ReleaseComObjectメソッドを呼び出して,Documentsオブジェクトを解放する 11. 2.で作ったApplicationオブジェクトのQuitメソッドを呼び出して,Wordを終了させる 12. 2.で作ったApplicationオブジェクトを引数にして,System.Runtime.InteropServices.Marshal.ReleaseComObjectメソッドを呼び出して,Applicationオブジェクトを解放する という手順になります。 とにかくReleaseComObjectが面倒なのですが,それ以外はほぼWord VBAのノリでいけます。 なお,シェイプだのテーブルだのがあると,テキスト中に変な文字が混じります。 MSDN: Marshal.ReleaseComObject メソッド (System.Runtime.InteropServices) http://msdn.microsoft.com/ja-jp/library/system.runtime.interopservices.marshal.releasecomobject.aspx MSDN: Missing.Value フィールド (System.Reflection) http://msdn.microsoft.com/ja-jp/library/system.reflection.missing.value.aspx MSKB: Visual C# を使用して Microsoft Word で新規文書を自動的に作成する方法 http://support.microsoft.com/kb/316384/ja 注)サポートオンライン情報ですが,COMオブジェクトの解放を行っていないという問題があります。

obkccan
質問者

お礼

回答ありがとうございます。 早速この方法を試してみようと思います。 取り急ぎ、御礼を。 無事できましたら改めてご報告します。 ありがとうございました!

関連するQ&A

  • 文書検索で、このアルゴリズムあたまいい?

    (モジュールは別として)pure perl で文書検索のアルゴリズムを考えています。 このアルゴリズムが頭良いか、悪いかのツッコミをお願いします。 1.前提  mecabを使用 2.文書を書き込むとき  mecabで全文書を解析して、単語ごとにデータベースに入力する。  キー:単語 中身:そのページ名がたくさんはいったもの 3.文書を削除するとき  mecabで全文書を解析して、単語ごとにデータベースに入力されたものを削除する 4.文書が変更になったとき  3→2を行なう 5.検索するとき  検索キーワードをmecabで解析する  分割されたワードごとに、結果を表示する。 たとえば・・・ 1.txt が 愛 植尾 かきくけこ 会社 であれば 愛 植尾 カキクケコ 会社 に、1.txtが登録される 2.txt が 哀 植 尾 かきくけこ 会社 であれば 哀 植 尾 カキクケコ 会社 に、2.txtが登録される キーワードで、愛なら 1.txt キーワードで、植尾なら 1.txt キーワードで、植 尾(AND)なら 2.txt キーワードで、かきくけこ なら 1.txt、2.txt という感じで検索できる感じです。 ※検索のインデックスは、文書の単語量に依存しますが、無制限と考えます。 ※実装は、YukiWikiDBというファイルベースのデータベースから利用可能なものとします。 ※あまり深く考えないでこのサブルーチンを組むことも考えています。

    • ベストアンサー
    • Perl
  • wordのVBAを使って別のword文書を開く

    windows-xp、word2003を使っています。 wordでVBAを使いたいのですが、インターネットを検索してもよくわかりません。 以下の内容が判る方、すみませんが教えてください。 word文書中にボタンをおく。(←ここはできました) ボタンをクリックすると別のword文書が立ち上がってくる。(←このvbaがわかりません) 以上、宜しくお願い致します。

  • WORD2000 検索ができません。

    WORD2000を使用しています。 編集-検索で文書中に入力されている単語を検索していたのですが 検索を実行しても、「検索しましたが項目が見つかりませんでした」 と表示されます。 明らかに文書中にある単語を(一字違わず入力するよう コピーペーストで)入力しても「見つかりませんでした」と なってしまいます。 (例:文書中に「東京都」とあるのに、「東京都」で 検索しても「見つからない」になる、という状態です) 検索オプションを変更しても、変化なしです。 検索しようとしている文書は、文字だけで表や図はありません。 どうすれば、検索ができるように設定できるのでしょうか?

  • Word2003で行数のみ指定したいが、範囲が文書ごとに異なる。

    Word2003で行数のみ指定したいが、範囲が文書ごとに異なる。 Word2003を使っています。 いくつかの文書の体裁を統一させるため、ページ設定にて「行数だけを指定する」にチェックし、行数を指定しようとしているのですが、いくつかの文書で、指定できる行数が統一したい行数に満たないことで悩んでいます。 例えば「45行」にしたいのに、範囲は「1~41」となっており、行送りを小さくしようとしても、数値が小さくならないのです。 諸文書は、本文のフォントとその大きさ、余白は統一しています。 こういう状態を解決するにはどのような方法がありますでしょうか? ご存知の方がいらっしゃいましたら、お教え下さい。 よろしくお願いします。

  • Word文書から特定の文字を抜き出すには

    Wordの文書内の指定した記号で囲まれた文字、 (例えば、"「"と"」"を指定すると、文書内の「」で囲まれた文字) を全部抜き出して、Excel上に出力したいのですがどうしたらいいのでしょうか? フォルダを指定して、そのフォルダに入ったWord文書を全て検索する。 指定する記号は、「」、【】、『』など5種類ほど、指定する。 このようなことがしたいのですが、書籍などの情報がなくて困っています。 よろしくお願いします。

  • 複数のword文書の中の語句(単語)を一度に検索するにはどうすればよい

    複数のword文書の中の語句(単語)を一度に検索するにはどうすればよいでしょうか。 (word2007 vistaを使用しています)

  • word2013 検索できない

    win10でword2013を使用しています。 普通に動いていたのですが、急に「文書の検索」ができなくなりました。 全くできないわけではなく、特定の単語や文字を入力して検索するとフリーズしてしまい そのほかの単語や文字は一瞬で検索結果が表示されます。 これまでにオンライン修復、アドインを外す、セーフモードで立ち上げる、レジストリの削除、fix ITでのアンインストール→再インストールを試しましたがどれも効果がありませんでした。 word2003で同じファイルを立ち上げて検索してみたところ 問題なく検索できました。 wordは仕事で使用しており、締め切りが近づいているため大変困っております。 どうかお助けください。

  • Word2010のファイル検索

    Word文書の中からある文字列を含むファイルを検索するのに, Word2003では「開く」のダイアログの右上の「ツール」→「検索」とたどると 「ファイル検索」のダイアログが開き, ターゲットの文字列と探す場所を細かく指定して目的の文書を絞り込めたんですが Word2010では「開く」のダイアログの「ツール」には「検索」がなくなっており, 右上の検索の窓にターゲットの文字列を入れると, まず「検索条件に一致する項目はありません」と出て, その下の「次の範囲内を再検索」の「カスタム」で対象とするフォルダを指定しても Word2003で同じフォルダを検索するといっぱいヒットするのに Word2010ではよくて1つ,2つ,しかもファイル名のみ検索しているような感じです。 結構頻繁に使っていたので非常に困っています。 Word2003のように検索するにはどのようにすればいいのでしょうか。 よろしくお願いいたします。 Word2010があまりにもがらりと変わっていて,かなり戸惑っています(>o<)

  • Excel VBAで呼び出したWordが文書への差し込みボタンが効かない状態で開く

    以下のExcel VBAでWordは開くのですが、新規文書への差し込みボタンが、活きていないです。参照設定は、Microsoft Word 11.0 Object Libraryを入れています。 どうしたらいいのでしょうか?困っています。 Sub Wordを開き、差し込み印刷する() Dim ワード As Object Dim ワード文書 As Object Dim フルパス As String フルパス = "D:\案内状.doc"          'フルパスを作成 Set ワード = CreateObject("Word.Application") 'Wordを起動 ワード.Visible =True 'Wordを表示 Set ワード文書 = ワード.documents.Open(フルパス) 'Word文書を開く End Sub

  • 文書から単語を検索したい・・・

    私はRuby初心者になります。 今、私は文字列(文)から文字列(単語)を検索させるプログラムを組みたいのですが、1つ分からない点が出てきたので質問させていただきました。 内容なのですがとりあえず以下のようなプログラムを本などで調べ組上げました。 *********************************************************** open("docu.txt"){|io|  puts io.read  io.pos = 0  File.readlines("word.txt").each{|line|   puts line   line.chomp!   p io.read.index(line)  } } *********************************************************** 【docu.txtの内容】 aiueokakikukekosasisuseso 【word.txtの内容】 keko *********************************************************** 結果: aiueokakikukekosasisuseso keko 11 これならちゃんと動いてくれました。 ただ、これらのテキストの内容を以下のような日本語にするとうまくいきません。 *********************************************************** 【docu.txtの内容】 あいうえおかきくけこさしすせそ 【word.txtの内容】 けこ *********************************************************** 結果: あいうえおかきくけこさしすせそ けこ nil やはり英数字でないと、うまくいかないようです。 こういった「ひらがな」や「漢字」でも検索してくれるようにするには、どういった作業が必要になるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Ruby

専門家に質問してみよう