重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

Visual C#でプログラミングをしています。
Wordファイルの本文の検索をしたいのですが
どうすればいいのか分かりません。

完成のイメージは
1.TextBoxに検索する単語を入力し、ボタンを押す
2.指定したパスにあるWord文書の本文を検索
3.検索語があるかどうかを返す
というものです。

.txtの本文を検索する方法は見つかったのですが
Word文書を調べる方はあるのでしょうか?
どなたか分かる方がおられましたら
お教え頂きたいです。よろしくお願いします。

A 回答 (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.r …
MSDN: Missing.Value フィールド (System.Reflection)
http://msdn.microsoft.com/ja-jp/library/system.r …
MSKB: Visual C# を使用して Microsoft Word で新規文書を自動的に作成する方法
http://support.microsoft.com/kb/316384/ja
注)サポートオンライン情報ですが,COMオブジェクトの解放を行っていないという問題があります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/08/28 11:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!