用java控制word_Java灵活的控制Word

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 放在 WINNT/system32/ 下比较简单省事) 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 Settings/Administrator /My Documents/AA.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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值