以下のようなVBScriptがあります。
===========================================================
'日本語から英語への翻訳の場合に、全角の英数字、記号を半角に変換するスクリプトです
Dim objWord
Set objWord = CreateObject("Word.Application")
'objWord.Visible = TrueobjWord.Documents.Open(WScript.Arguments.Item(0))
' 検索条件の指定 objWord.Selection.Find.ClearFormatting
objWord.Selection.Find.Text = "[0-9A-Za-z!-?「」[] .,]"
objWord.Selection.Find.Forward = True
objWord.Selection.Find.Wrap = 1
objWord.Selection.Find.Format = False
objWord.Selection.Find.MatchCase = False
objWord.Selection.Find.MatchWholeWord = False
objWord.Selection.Find.MatchByte = False
objWord.Selection.Find.MatchAllWordForms = False
objWord.Selection.Find.MatchSoundsLike = False
objWord.Selection.Find.MatchFuzzy = False
objWord.Selection.Find.MatchWildcards = True
Do While objWord.Selection.Find.Execute
objWord.Selection.Range.CharacterWidth = 6
objWord.Selection.MoveRight
Loop
objWord.Selection.WholeStory
objWord.Selection.Font.Name = "MS Pゴシック"
objWord.ActiveDocument.Save
objWord.Documents.Close
objWord.Quitset objWord = nothing
===========================================================
これをJacob.jar(
http://www.land-of-kain.de/docs/jacob/)を使用してJavaで実行しようとすると以下のようになります。
===============================================================
import com.jacob.com.*;
import com.jacob.activeX.*;
中略
String openUrl = "D:\Test\sample.doc";
①ActiveXComponent oWord = new ActiveXComponent("Word.Application");
try{
Object oDocuments = oWord.getProperty("Documents").toDispatch();
Object oDocument = Dispatch.call(oDocuments, "Open", openUrl).toDispatch();
②Object oSelection = oWord.getProperty("Selection").toDispatch();
//ここから半角処理
Object oFind = oWord.call(oSelection, "Find").toDispatch();
Dispatch.call(oFind, "ClearFormatting");
Dispatch.put(oFind, "Text", "[0-9A-Za-z!-?「」[] .,]");
Dispatch.put(oFind, "Forward", true);
Dispatch.put(oFind, "Wrap", 1);
Dispatch.put(oFind, "Format", false);
Dispatch.put(oFind, "MatchCase", false);
Dispatch.put(oFind, "MatchWholeWord", false);
Dispatch.put(oFind, "MatchByte", false);
Dispatch.put(oFind, "MatchAllWordForms", false);
Dispatch.put(oFind, "MatchSoundsLike", false);
Dispatch.put(oFind, "MatchFuzzy", false);
Dispatch.put(oFind, "MatchWildcards", true);
while (Dispatch.call(oFind, "Execute").toBoolean()){
③Dispatch oRange = Dispatch.call(oSelection, "Range").toDispatch();
④Dispatch.put(oRange, "CharacterWidth", 6);
Dispatch.call(oSelection, "MOveRight");
}
Object oWholeStory = oWord.call(oSelection, "WholeStory");
Object oFont = Dispatch.get(oSelection, "Font").toDispatch();
Dispatch.put(oFont, "Name", "MS Pゴシック");
Object oActiveDocument = oWord.getProperty("ActiveDocument").toDispatch();
Dispatch.call(oActiveDocument, "Save");
} catch (ComFailException e){
System.err.println(e.getMessage() + e.getHResult());
} finally {
Dispatch.call(oWord, "Quit");
ComThread.Release();
}
使い方
MS Wordを操作するのであれば以下の2行は必ず必要です。
ActiveXComponent oWord = new ActiveXComponent("Word.Application");
Object oDocuments = oWord.getProperty("Documents").toDispatch();
次に例えばVBでobjWord.Selection.Range.CharacterWidth = 6 とある記述をJavaで書くには、まずRangeオブジェクトを作成、そこからCharacterWidthプロパティに6を入れるといった記述をする。
RangeはSelectionオブジェクトのメソッドなのでまずはSelectionオブジェクトを作成する。
Selectionオブジェクトの上はMS WordのActiveXComponentなので既に
①で作成されている。
ということで手順は
1.
②でSelectionオブジェクトの作成をする。
2.
③でRangeオブジェクトを作成する。
3.
④でCharacterWidthプロパティに値をセットする。
となる。
メソッドやプロパティに値をセットする時は必ずそれを実行するためのオブジェクトを作成する必要があります。
メソッドの実行方法
Dispatch.call(オブジェクト名, メソッド名);
プロパティの設定方法;
Dispatch.put(オブジェクト名, プロパティ名,プロパティ 値);