利用JAVA語言深度控制Word(轉)
利用JAVA語言深度控制Word(轉)[@more@]Java 控制Office 控制元件是非常麻煩的一件事情。
自從有了JACOB後,事情變得簡單多了。
但是要實現Java靈活的控制Word還是一件非常麻煩的事情。
下面介紹幾個WORD常見的物件以及一些典型的處理過程,希望對大家有幫助。
(請注意:JDK1.3.2執行 Jacob比較正常,JDK1.4有問題)
/** WORD物件*/
private ActiveXComponent word = null;
/** 文件物件*/
private Dispatch documents = null;
/** selection 物件是比較重要的一個物件 */
private Dispatch vSelection = null;
/** 一個WORD文件 */
private Dispatch wordfile = null;
1,初始化
word = new ActiveXComponent("Word.Application");
documents = word.getProperty("Documents").toDispatch();
(將JACOB 放在 WINNTsystem32 下比較簡單省事)
2,開啟檔案
wordfile = Dispatch.invoke(
documents,
"Open",
Dispatch.Method,
new Object[] {
strFileName,
new Variant(true),//是否進行轉換 ConfirmConversions
new Variant(false)//是否只讀
}, new int[1]).toDispatch();
vSelection = word.getProperty("Selection").toDispatch();
在WORD中,選定內容進行轉換時,不用象Java物件一樣來回的重新取,這個物件一直有效。
3,顯示WORD
word.setProperty("Visible", new Variant(visible));
4,設定WORD的位置
Dispatch activeWindow = Dispatch.get(word, "Application").toDispatch();
Dispatch.put(activeWindow, "WindowState", new Variant(0));
Dispatch.put(activeWindow, "Top", new Variant(0));
Dispatch.put(activeWindow, "Left", new Variant(0));
Dispatch.put(activeWindow, "Height", new Variant(600));
Dispatch.put(activeWindow, "width", new Variant(800));
進行將JAVA內的資料和WORD交換,常用的做法是,在WORD上作一些特殊的標記,利用 FIND 和 Replace的方法進行,這個方法不是太好。
個人覺得使用超連結的模式比較方便。
有幾大優點:
1, Hyperlink 有3個區域可以讓開發者自己利用
ActiveDocument.Hyperlinks.Add
Anchor:=Selection.Range,
Address:="位置", //地址(可以利用) 有個缺點
SubAddress:="",//子位置(可以利用)
ScreenTip:="", //螢幕提示
TextToDisplay:="顯示內容"//最好利用的東西
個人建議使用TextToDisplay。
Address 會在儲存時被替換成絕對路徑。
比如你錄入一個
“AA.BB.CC”
儲存時可能會被替換成
C:Documents and SettingsAdministrator My DocumentsAA.BB.CC
2, 可以進行自動定位
利用Hyperlinks 可以將文章中所有的超連結得到。
也可以將指定範圍的超連結得到。
3, 可以自由排版
4, 可以複製貼上
新增超連結:
Dispatch Hyperlinks = Dispatch.get(wordfile, "Hyperlinks").toDispatch();
Dispatch range = Dispatch.get(vSelection, "Range").toDispatch();
Dispatch h=Dispatch.invoke(Hyperlinks,
"Add", Dispatch.Method, new Object[]
{ range,
new Variant("Address"),
new Variant("SubAddress"),
new Variant("{table.fieldName}"),//建議的資料連結處
new Variant("姓名") }, // 在WORD中顯示的內容
new int[4]).toDispatch();
Dispatch hRange=Dispatch.get(h, "Range").toDispatch();
Dispatch.call(hRange,"select");
//設定字型,顏色
Dispatch font = Dispatch.get(vSelection, "Font").toDispatch();
Dispatch.put(font,"Underline", new Variant(0));
Dispatch.put(font,"Color", new Variant(0));
//取消選擇
Dispatch.call(vSelection,"MoveRight",new Variant(1),new Variant(1));
超連結替換內容:
1, 得到所有的超連結
//選擇物件
Dispatch.call(dObject, "select");
//得到超連結集合
Dispatch Hyperlinks = Dispatch.get(vSelection, "Hyperlinks").toDispatch();
//得到有多少個超連結
int nHyperlink = Dispatch.get(Hyperlinks, "count").toInt();
//得到一個超連結
Dispatch hyperlink=Dispatch.invoke(Hyperlinks, "item",
Dispatch.Method, new Object[] { new Integer(i + 1)},
new int[1]).toDispatch()));
2, 替換內容
Dispatch.put(hyperlink, "TextToDisplay", information);
3, 取消超連結,將超連結變成普通文字。
Dispatch.call(hyperlink, "delete");
如何實現批次資料自動擴充套件,建議使用表格進行自動擴充套件,方便簡單。
結合使用上面超連結的技術。會非常簡單:
比如有如下資料:
DataA
DataB
1, 列出所有表格
和列出所有超連結基本一樣:
private void getTables01(Dispatch objcet,Vector vTableStore) {
Dispatch tables = Dispatch.get(objcet, "tables").toDispatch();
int nTableAmount = Dispatch.get(tables, "count").toInt();
for (int i = 0; i < nTableAmount; i++) {
Dispatch table =
Dispatch
.invoke(
tables,
"item",
Dispatch.Method,
new Object[] { new Integer(i + 1)},
new int[1])
.toDispatch();
vTableStore.add(new DTable(table));
getTables01(table,vTableStore);//處理表格套用表格的情況
}
}
2, 表格的可以控制的物件
Dispatch dRows = Dispatch.get(dTable, "rows").toDispatch();//所有行
int nRows = Dispatch.get(dRows, "count").toInt();
3, 取得一行的內容
Dispatch dRow =
Dispatch
.invoke(
rows,
"item",
Dispatch.Method,
new Object[] { new Integer(row + 1)},
new int[1])
.toDispatch();
return dRow;
}catch(ComFailException cfe)
{
/** 帶有合併行的情況*/
return null;
}
4, 得到一行的超連結
DHyperlink dhInRow[] = listHyperlinks(dRow);
5, 將某一行複製很多次
Dispatch.call(dRow, "select");
Dispatch.call(vSelection, "Copy");
int nCopyNow = nDataBlockRow - 1;
for (int nCopys = 0; nCopys < nCopyNow; nCopys++) {
try {
Dispatch.call(vSelection, "Paste");
}catch(Exception e) { e.printStackTrace();
//有時候文件損壞,可以忽略本問題,實際上已經貼上上了
}
}
6, 替換內容,讀到這裡就不用介紹了。
列印預覽:
Dispatch.call(wordfile,"PrintPreView");
其他的功能發掘
利用WORD的宏錄製,以及VB編輯器,輔助功能,都能發掘出來。
自從有了JACOB後,事情變得簡單多了。
但是要實現Java靈活的控制Word還是一件非常麻煩的事情。
下面介紹幾個WORD常見的物件以及一些典型的處理過程,希望對大家有幫助。
(請注意:JDK1.3.2執行 Jacob比較正常,JDK1.4有問題)
/** WORD物件*/
private ActiveXComponent word = null;
/** 文件物件*/
private Dispatch documents = null;
/** selection 物件是比較重要的一個物件 */
private Dispatch vSelection = null;
/** 一個WORD文件 */
private Dispatch wordfile = null;
1,初始化
word = new ActiveXComponent("Word.Application");
documents = word.getProperty("Documents").toDispatch();
(將JACOB 放在 WINNTsystem32 下比較簡單省事)
2,開啟檔案
wordfile = Dispatch.invoke(
documents,
"Open",
Dispatch.Method,
new Object[] {
strFileName,
new Variant(true),//是否進行轉換 ConfirmConversions
new Variant(false)//是否只讀
}, new int[1]).toDispatch();
vSelection = word.getProperty("Selection").toDispatch();
在WORD中,選定內容進行轉換時,不用象Java物件一樣來回的重新取,這個物件一直有效。
3,顯示WORD
word.setProperty("Visible", new Variant(visible));
4,設定WORD的位置
Dispatch activeWindow = Dispatch.get(word, "Application").toDispatch();
Dispatch.put(activeWindow, "WindowState", new Variant(0));
Dispatch.put(activeWindow, "Top", new Variant(0));
Dispatch.put(activeWindow, "Left", new Variant(0));
Dispatch.put(activeWindow, "Height", new Variant(600));
Dispatch.put(activeWindow, "width", new Variant(800));
進行將JAVA內的資料和WORD交換,常用的做法是,在WORD上作一些特殊的標記,利用 FIND 和 Replace的方法進行,這個方法不是太好。
個人覺得使用超連結的模式比較方便。
有幾大優點:
1, Hyperlink 有3個區域可以讓開發者自己利用
ActiveDocument.Hyperlinks.Add
Anchor:=Selection.Range,
Address:="位置", //地址(可以利用) 有個缺點
SubAddress:="",//子位置(可以利用)
ScreenTip:="", //螢幕提示
TextToDisplay:="顯示內容"//最好利用的東西
個人建議使用TextToDisplay。
Address 會在儲存時被替換成絕對路徑。
比如你錄入一個
“AA.BB.CC”
儲存時可能會被替換成
C:Documents and SettingsAdministrator My DocumentsAA.BB.CC
2, 可以進行自動定位
利用Hyperlinks 可以將文章中所有的超連結得到。
也可以將指定範圍的超連結得到。
3, 可以自由排版
4, 可以複製貼上
新增超連結:
Dispatch Hyperlinks = Dispatch.get(wordfile, "Hyperlinks").toDispatch();
Dispatch range = Dispatch.get(vSelection, "Range").toDispatch();
Dispatch h=Dispatch.invoke(Hyperlinks,
"Add", Dispatch.Method, new Object[]
{ range,
new Variant("Address"),
new Variant("SubAddress"),
new Variant("{table.fieldName}"),//建議的資料連結處
new Variant("姓名") }, // 在WORD中顯示的內容
new int[4]).toDispatch();
Dispatch hRange=Dispatch.get(h, "Range").toDispatch();
Dispatch.call(hRange,"select");
//設定字型,顏色
Dispatch font = Dispatch.get(vSelection, "Font").toDispatch();
Dispatch.put(font,"Underline", new Variant(0));
Dispatch.put(font,"Color", new Variant(0));
//取消選擇
Dispatch.call(vSelection,"MoveRight",new Variant(1),new Variant(1));
超連結替換內容:
1, 得到所有的超連結
//選擇物件
Dispatch.call(dObject, "select");
//得到超連結集合
Dispatch Hyperlinks = Dispatch.get(vSelection, "Hyperlinks").toDispatch();
//得到有多少個超連結
int nHyperlink = Dispatch.get(Hyperlinks, "count").toInt();
//得到一個超連結
Dispatch hyperlink=Dispatch.invoke(Hyperlinks, "item",
Dispatch.Method, new Object[] { new Integer(i + 1)},
new int[1]).toDispatch()));
2, 替換內容
Dispatch.put(hyperlink, "TextToDisplay", information);
3, 取消超連結,將超連結變成普通文字。
Dispatch.call(hyperlink, "delete");
如何實現批次資料自動擴充套件,建議使用表格進行自動擴充套件,方便簡單。
結合使用上面超連結的技術。會非常簡單:
比如有如下資料:
DataA
DataB
1, 列出所有表格
和列出所有超連結基本一樣:
private void getTables01(Dispatch objcet,Vector vTableStore) {
Dispatch tables = Dispatch.get(objcet, "tables").toDispatch();
int nTableAmount = Dispatch.get(tables, "count").toInt();
for (int i = 0; i < nTableAmount; i++) {
Dispatch table =
Dispatch
.invoke(
tables,
"item",
Dispatch.Method,
new Object[] { new Integer(i + 1)},
new int[1])
.toDispatch();
vTableStore.add(new DTable(table));
getTables01(table,vTableStore);//處理表格套用表格的情況
}
}
2, 表格的可以控制的物件
Dispatch dRows = Dispatch.get(dTable, "rows").toDispatch();//所有行
int nRows = Dispatch.get(dRows, "count").toInt();
3, 取得一行的內容
Dispatch dRow =
Dispatch
.invoke(
rows,
"item",
Dispatch.Method,
new Object[] { new Integer(row + 1)},
new int[1])
.toDispatch();
return dRow;
}catch(ComFailException cfe)
{
/** 帶有合併行的情況*/
return null;
}
4, 得到一行的超連結
DHyperlink dhInRow[] = listHyperlinks(dRow);
5, 將某一行複製很多次
Dispatch.call(dRow, "select");
Dispatch.call(vSelection, "Copy");
int nCopyNow = nDataBlockRow - 1;
for (int nCopys = 0; nCopys < nCopyNow; nCopys++) {
try {
Dispatch.call(vSelection, "Paste");
}catch(Exception e) { e.printStackTrace();
//有時候文件損壞,可以忽略本問題,實際上已經貼上上了
}
}
6, 替換內容,讀到這裡就不用介紹了。
列印預覽:
Dispatch.call(wordfile,"PrintPreView");
其他的功能發掘
利用WORD的宏錄製,以及VB編輯器,輔助功能,都能發掘出來。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-959038/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java 語言是強型別語言語言(轉)Java型別
- 如何用Java語言優雅地匯出Word文件Java
- JAVA學習腳印3: java語言控制流程Java
- 語言小知識-Java ArrayList類 深度解析Java
- 語言小知識-Java HashMap類 深度解析JavaHashMap
- java兩個控制語句(轉)Java
- 高階程式設計師——java語言深度解析程式設計師Java
- java Word 轉 PDF格式Java
- SQL語言基礎(資料控制語言)SQL
- Oracle資料操作和控制語言詳解(轉)Oracle
- Java語言和C++語言的差異 (轉)JavaC++
- Java 語法介紹(一):Java語言的基本組成(轉)Java
- Java語言編碼規範(一) (轉)Java
- Java語言編碼規範(2)(轉)Java
- Java語言編碼規範(1)(轉)Java
- Java 將HTML轉為WordJavaHTML
- Java 將Word轉為OFDJava
- stm32微控制器利用ntc熱敏電阻溫度轉換公式C語言版公式C語言
- 利用C語言小程式來解決大問題(轉)C語言
- Java 語法介紹(五):條件控制(轉)Java
- C語言深度剖析-筆記C語言筆記
- Java 控制語句Java
- Java語言的12大特色介紹(轉)Java
- 文字編輯器原始檔(java語言) (轉)Java
- java語言屬於哪種語言Java
- 用語言控制Linux:Linux的語音識別軟體(轉)Linux
- Java語言概述Java
- Java語言——類Java
- 輕鬆玩轉51微控制器C語言pdfC語言
- 微控制器C語言實現迴圈移位 (轉)C語言
- Java語言和C++語言的差異——老生常談 (轉)JavaC++
- Java語言特點及開發工具JDK(轉)JavaJDK
- 解析Java語言的介面與型別安全(轉)Java型別
- 利用vbs指令碼將word文件轉換為pdf指令碼
- java語言學習Java
- Java語言規範Java
- Java 將Word轉為HTML的方法JavaHTML
- C語言深度剖析——讀書筆記C語言筆記