如何利用JAVA語言深度控制Word

這篇文章主要介紹了如何利用JAVA語言深度控制Word,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、網(wǎng)站空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、津市網(wǎng)站維護(hù)、網(wǎng)站推廣。

Java 控制Office 控件是非常麻煩的一件事情。
自從有了JACOB后,事情變得簡(jiǎn)單多了。
但是要實(shí)現(xiàn)Java靈活的控制Word還是一件非常麻煩的事情。

下面介紹幾個(gè)WORD常見的對(duì)象以及一些典型的處理過程,希望對(duì)大家有幫助。
(請(qǐng)注意:JDK1.3.2運(yùn)行 Jacob比較正常,JDK1.4有問題)
/** WORD對(duì)象*/
private ActiveXComponent word = null;
/** 文檔對(duì)象*/
private Dispatch documents = null;
/** selection 對(duì)象是比較重要的一個(gè)對(duì)象 */
private Dispatch vSelection = null;
/** 一個(gè)WORD文檔 */
private Dispatch wordfile = null;
1,初始化
word = new ActiveXComponent("Word.Application");
documents = word.getProperty("Documents").toDispatch();
(將JACOB 放在 WINNTsystem32 下比較簡(jiǎn)單省事)
2,打開文件
wordfile = Dispatch.invoke(
documents,
"Open",
Dispatch.Method,
new Object[] {
strFileName,
new Variant(true),//是否進(jìn)行轉(zhuǎn)換 ConfirmConversions
new Variant(false)//是否只讀
}, new int[1]).toDispatch();
vSelection = word.getProperty("Selection").toDispatch();
在WORD中,選定內(nèi)容進(jìn)行轉(zhuǎn)換時(shí),不用象Java對(duì)象一樣來回的重新取,這個(gè)對(duì)象一直有效。
3,顯示W(wǎng)ORD
word.setProperty("Visible", new Variant(visible));
4,設(shè)置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));

進(jìn)行將JAVA內(nèi)的數(shù)據(jù)和WORD交換,常用的做法是,在WORD上作一些特殊的標(biāo)記,利用 FIND 和 Replace的方法進(jìn)行,這個(gè)方法不是太好。
個(gè)人覺得使用超鏈接的模式比較方便。
有幾大優(yōu)點(diǎn):
1, Hyperlink 有3個(gè)區(qū)域可以讓開發(fā)者自己利用
ActiveDocument.Hyperlinks.Add
Anchor:=Selection.Range,
Address:="位置", //地址(可以利用) 有個(gè)缺點(diǎn)
SubAddress:="",//子位置(可以利用)
ScreenTip:="", //屏幕提示
TextToDisplay:="顯示內(nèi)容"//最好利用的東西

個(gè)人建議使用TextToDisplay。
Address 會(huì)在保存時(shí)被替換成絕對(duì)路徑。
比如你錄入一個(gè)
“AA.BB.CC”
保存時(shí)可能會(huì)被替換成
C:Documents and SettingsAdministrator My DocumentsAA.BB.CC
2, 可以進(jìn)行自動(dòng)定位
利用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}"),//建議的數(shù)據(jù)鏈接處
new Variant("姓名") }, // 在WORD中顯示的內(nèi)容
new int[4]).toDispatch();
Dispatch hRange=Dispatch.get(h, "Range").toDispatch();
Dispatch.call(hRange,"select");
//設(shè)置字體,顏色
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));

超鏈接替換內(nèi)容:
1, 得到所有的超鏈接
//選擇對(duì)象
Dispatch.call(dObject, "select");
//得到超鏈接集合
Dispatch Hyperlinks = Dispatch.get(vSelection, "Hyperlinks").toDispatch();
//得到有多少個(gè)超鏈接
int nHyperlink = Dispatch.get(Hyperlinks, "count").toInt();
//得到一個(gè)超鏈接
Dispatch hyperlink=Dispatch.invoke(Hyperlinks, "item",
Dispatch.Method, new Object[] { new Integer(i + 1)},
new int[1]).toDispatch()));
2, 替換內(nèi)容
Dispatch.put(hyperlink, "TextToDisplay", information);
3, 取消超鏈接,將超鏈接變成普通文字。
Dispatch.call(hyperlink, "delete");

如何實(shí)現(xiàn)批量數(shù)據(jù)自動(dòng)擴(kuò)展,建議使用表格進(jìn)行自動(dòng)擴(kuò)展,方便簡(jiǎn)單。
結(jié)合使用上面超鏈接的技術(shù)。會(huì)非常簡(jiǎn)單:

比如有如下數(shù)據(jù):

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, 表格的可以控制的對(duì)象
Dispatch dRows = Dispatch.get(dTable, "rows").toDispatch();//所有行
int nRows = Dispatch.get(dRows, "count").toInt();
3, 取得一行的內(nèi)容
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();
//有時(shí)候文檔損壞,可以忽略本問題,實(shí)際上已經(jīng)粘貼上了
}
}
6, 替換內(nèi)容,讀到這里就不用介紹了。

打印預(yù)覽:
Dispatch.call(wordfile,"PrintPreView");

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何利用JAVA語言深度控制Word”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

新聞名稱:如何利用JAVA語言深度控制Word
當(dāng)前URL:http://bm7419.com/article12/psshdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航用戶體驗(yàn)、微信公眾號(hào)、App開發(fā)企業(yè)建站、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管