<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 303  文章 - 883  trackbacks - 0
    <2007年3月>
    25262728123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    歡迎光臨! 
    閑聊 QQ:1074961813

    隨筆分類(357)

    我管理的群

    公共blog

    • n維空間
    • Email : java3d@126.com 群 : 12999758

    參與管理的論壇

    好友的blog

    我的其他blog

    朋友的網(wǎng)站

    搜索

    •  

    最新評(píng)論

    這個(gè)文章給的文檔和API下載地址有問題,下載問題,請(qǐng)大家參照下個(gè)文章
    這些文章好象都有問題,等我整整寫個(gè)文章給大家吧


    Java 控制Office 控件是非常麻煩的一件事情。
    自從有了JACOB后,事情變得簡單多了。
    但是要實(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?放在?WINNT\system32\?下比較簡單省事)?

    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 Settings\Administrator \My Documents\AA.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é)合使用上面超鏈接的技術(shù)。會(huì)非常簡單:

    比如有如下數(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");

    其他的功能發(fā)掘
    利用WORD的宏錄制,以及VB編輯器,輔助功能,都能發(fā)掘出來



    地震讓大伙知道:居安思危,才是生存之道。
    posted on 2007-03-24 13:31 小尋 閱讀(466) 評(píng)論(0)  編輯  收藏 所屬分類: j2se/j2ee/j2mec/c++/C#/pasic/vb/php/asp(.net)/win-cgi/xml...
    主站蜘蛛池模板: 一级免费黄色大片| 18禁无遮挡无码国产免费网站| 亚洲性日韩精品一区二区三区 | 全免费a级毛片免费**视频| 亚洲AV无码一区二区三区鸳鸯影院| 国产日韩成人亚洲丁香婷婷| 全部免费毛片在线播放| 亚洲精品国产综合久久久久紧| 亚洲自偷自偷图片| 一个人免费观看www视频在线| 性生大片视频免费观看一级| 久久亚洲熟女cc98cm| 永久中文字幕免费视频网站| 国产日韩AV免费无码一区二区三区| 亚洲剧情在线观看| 亚洲一级片内射网站在线观看| 国产免费不卡v片在线观看| 中文字幕永久免费| 亚洲成a人无码亚洲成www牛牛| 亚洲成av人在线视| 免费在线观看理论片| 黄页免费的网站勿入免费直接进入| 青青青视频免费观看| 亚洲a级成人片在线观看| 中文字幕亚洲不卡在线亚瑟| 成年丰满熟妇午夜免费视频| 免费91麻豆精品国产自产在线观看| 亚洲精品动漫免费二区| 日韩亚洲Av人人夜夜澡人人爽| 亚洲国产日韩在线观频| 在线免费观看一级毛片| 最近中文字幕免费2019| 好湿好大好紧好爽免费视频| 亚洲日本中文字幕天天更新| 亚洲精品国产电影午夜| 亚洲啪啪AV无码片| 亚洲午夜无码片在线观看影院猛 | 免费一看一级毛片| 最近免费中文字幕视频高清在线看| 久久久精品免费国产四虎| 无码的免费不卡毛片视频|