0

Microsoft Office Word ドキュメントからテキストまたはテキストフィールドを読み取り、Jacob を使用して新しい単語に置き換えるプログラムを作成しています。このリンクhttp://tech-junki.blogspot.de/2009/06/java-jacob-edit-ms-word.htmlから助けを得ましたが、うまくいきませんでした。テキストを読んで新しいテキストに置き換える方法を教えてください!? もっと良いアイデアがあれば教えてください。

ノート:

1-この方法ではエラーは発生しませんでしたが、特定の単語が見つかりませんでした!

2- 要求された検索テキスト (このメソッド arrayKeyString 内) が存在するかどうか、または ms word で記述されているかどうかを知るために、If() を作成するにはどうすればよいですか?

ありがとう。

    import com.jacob.activeX.ActiveXComponent;
    import com.jacob.com.Dispatch;

    //class
    ActiveXComponent oWord = null;
    Dispatch documents = null;
    Dispatch document = null;
    Dispatch selection = null;

    //method
    oWord = new ActiveXComponent("Word.Application");
    documents = oWord.getProperty("Documents").toDispatch();
    document = Dispatch.call(documents, "Open",   finalName).toDispatch();
    Dispatch selections = oWord.getProperty("Selection").toDispatch();
    Dispatch findT = Dispatch.call(selections, "Find").toDispatch();

    //hm is a Hashmap 
    for (int i=0; i<hm.size();i++){
       hm.get(array[i].toString());
       String arrayValString = (arrayVal[i].toString());
       String arrayKeyString = array[i].toString();
       // Here we should write an if() to check for our key word:
       Dispatch.put(findT, "Text", arrayKeyString); 
       Dispatch.call(findT, "Execute"); 
       Dispatch.put(selections, "Text", arrayValString);
    }
4

2 に答える 2

0

論理エラーのある for ループも変更しました。質問を理解できる限り、ドキュメント内のハッシュマップのすべての単語を置き換えようとしている場合、if ステートメントは必要ありません。

//hm is a Hashmap 
for (int i=0; i<hm.size();i++){
   //you were getting the value to be replaced but not storing that in arrayValString object
   String arrayValString = hm.get(array[i].toString());
   String arrayKeyString = array[i].toString();
   // Here we should write an if() to check for our key word:
   //if you want to replace all the text in your hash map in the word document then you don't need a if condition ...so if the text is not present in the document nothing will be replaced.

   Dispatch.put(findT, "Text", arrayKeyString); 
   Dispatch.call(findT, "Execute"); 
   Dispatch.put(selections, "Text", arrayValString);
}
于 2013-04-17T09:26:31.433 に答える
0

私の答えにはおそらく少し遅すぎることはわかっていますが、このページを見つける他のすべての人のために、ここに残しておきます。

これは私がこれを行った方法です:

private static final Variant MATCH_CASE = new Variant(true);
private static final Variant MATCH_WILDCARDS = new Variant(false);
private static final Variant FORWARD = new Variant(true);
private static final Variant MATCH_WHOLE_WORD = new Variant(false);
private static final Variant MATCH_SOUNDS_LIKE = new Variant(false);
private static final Variant MATCH_ALL_WORD_FORMS = new Variant(false);
private static final Variant FORMAT = new Variant(false);

private static final Variant WRAP = new Variant(1);
private static final Variant REPLACE = new Variant(2);    

//...........


Dispatch selection = Dispatch.get(oleComponent,"Selection").toDispatch();
Dispatch oFind = Dispatch.call(selection, "Find").toDispatch();



for (Entry<String, String> entry : replacements.entrySet()) {

 while (replaced) {
     Variant variant = Dispatch.invoke(oFind,"Execute",Dispatch.Method, new Object[] {entry.getKey(),MATCH_CASE, MATCH_WHOLE_WORD,MATCH_WILDCARDS, MATCH_SOUNDS_LIKE, MATCH_ALL_WORD_FORMS,FORWARD, WRAP, FORMAT, entry.getValue(), new Variant(true), REPLACE }, new int[1]);

   replaced = variant.getBoolean();
 }
}

このコードは、マップ全体を通過し、各要素について、単語 Document 内のすべての出現箇所を置き換えます。

于 2015-02-16T16:34:17.863 に答える