




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2010-03-12Java调用com组件操作word使用总结 文章分类:Java编程 来源: 一、准备工作先了解一下概念,JACOB 就是 JAVA-COM Bridge的缩写,提供自动化的访问com的功能,也是通过JNI功能访问windows平台下的com组件或者win32系统库的。这是一个开始于 1999年的开源项目的成果,有很多使用者对该项目进行了修改,做出了自己的贡献。Jacob下载 地址: 我在这里下载 了Jacob1.14.3和jacob1.9的版本两个版本这里下载 的是目前最新的Jacob1.14.3的Release版。另外java操作word方式还有(个人认为通过jacob最
2、好,自己可以扩展,网上除poi之外几乎全是java-com技术实现的):(1):Apache POI - Java API To Access Microsoft Format Files(/ );对word处理不够强处理Excel功能可以,但是全是通过java完成的,不需 要com组件支持;(2):java2word 是一个在java程序中调用 MS Office Word 文档的组件(类库)。该组件提供了一组简单的接口,以便java程序调用他的服务操作Word 文档。(好象也是用的java-com技术);(3)web开发语言操作word的功能最好还是
3、用第三方的控件, 看看这个SOAOFFICE,还可以使用js 写VBA呢 二、安装JacobJacob的安装非常的简单,我们解开下载的jacob_1.9.zip,在文件夹中找到jacob.dll和jacob.jar两个文件,如果是 Jacob1.14.3则是jacob-1.14.3-x86.dll(32位,机和jacob-1.14.3-x64.dll(64位)和 jacob.jar两个文件。Jacob.dll直接放到系统的system32文件夹下就行了,连注册都不用的(或者拷贝到jdk或者jre的bin目 录下也行,当前测试 文件所在的目录也行,就是只要在java.library.path中就
4、可以)。而jacob.jar设置到classpath中去就 可以了,或者在IDE开发环境的工程中设置扩展库也一样的,我是这样使用的将jacob-1.14.3-x86.dll或复制 到%Tomcat5%bin目录下将jacob.jar复制到%Tomcot5%Sharelib目录下,我使用过程中感觉放到这里是一个最终解决 办法,当你放哪都有问题的时候。我这样用之后再没有出过因为系统不一样出现的各种各样的问题,当然你作的是web的项目。注意使用jacob一写要安装word,我装的word2003,如果是操作word2007就不用jacob了(好像这方面的API)。对jacob.dll几种配置方法 (
5、网上看到):2008-07-31 11:59:491、把jacob.dll文件,复制到 windowssystem32 目录下。(注:我用的时候这个方法不能运行)2、 把jacob.dll放入 Java jdk1.5.0_06jrebin目录下.把jacob.jar放入 Javajdk1.5.0_0jrelibext目录下.可以正常运行。3、把jacob.dll放入 glcsrc目录下.把jacob.jar放入WEB-INFlib目录下,也是可以正常运行。三、使用(以下是我改写的一个word操作类,希望有兴趣的朋友完善,记得发给我一份)/注意java操作word关键是定位操作对象;import
6、 com.jacob.activeX.ActiveXComponent;import .Dispatch;import .Variant;/* jacob操作MSword类* author*/public class WordBean / word文档private Dispatch doc;/ word运行程序对象private ActiveXComponent word;/ 所有word文档集合private Dispatch documents;/ 选定的范围或插入点private Dispatch selection;private boolean saveOnExit = true;
7、public WordBean()throws Exceptionif (word = null) word = new ActiveXComponent("Word.Application");word.setProperty("Visible", new Variant(false); /不可见打开wordword.setProperty("AutomationSecurity", new Variant(3); /禁用宏if (documents = null)documents = word.getProperty("
8、;Documents").toDispatch();/* 设置退出时参数* param saveOnExit* boolean true-退出时保存文件,false-退出时不保存文件*/public void setSaveOnExit(boolean saveOnExit) this.saveOnExit = saveOnExit;/* 创建一个新的word文档*/public void createNewDocument() doc = Dispatch.call(documents, "Add").toDispatch();selection = Dispa
9、tch.get(word, "Selection").toDispatch();/* 打开一个已存在的文档* param docPath*/public void openDocument(String docPath) closeDocument();doc = Dispatch.call(documents, "Open", docPath).toDispatch();selection = Dispatch.get(word, "Selection").toDispatch(); /*只读 打开一个保护文档,* param do
10、cPath-文件全名* param pwd-密码*/public void openDocumentOnlyRead(String docPath, String pwd)throws Exception closeDocument();/ doc = Dispatch.invoke(documents, "Open", Dispatch.Method,/ new ObjectdocPath, new Variant(false), new Variant(true), new Variant(true), pwd,/ new int1).toDispatch();/打开w
11、ord文件doc = Dispatch.callN(documents, "Open", new ObjectdocPath, new Variant(false),new Variant(true), new Variant(true), pwd, "", new Variant(false).toDispatch();selection = Dispatch.get(word, "Selection").toDispatch();public void openDocument(String docPath, String pwd
12、)throws Exception closeDocument();doc = Dispatch.callN(documents, "Open", new ObjectdocPath, new Variant(false),new Variant(false), new Variant(true), pwd).toDispatch();selection = Dispatch.get(word, "Selection").toDispatch();/* 把选定的内容或插入点向上移动* param pos* 移动的距离*/public void moveU
13、p(int pos) if (selection = null)selection = Dispatch.get(word, "Selection").toDispatch();for (int i = 0; i < pos; i+)Dispatch.call(selection, "MoveUp");/* 把选定的内容或者插入点向下移动* param pos* 移动的距离*/public void moveDown(int pos) if (selection = null)selection = Dispatch.get(word, "
14、;Selection").toDispatch();for (int i = 0; i < pos; i+)Dispatch.call(selection, "MoveDown");/* 把选定的内容或者插入点向左移动* param pos* 移动的距离*/public void moveLeft(int pos) if (selection = null)selection = Dispatch.get(word, "Selection").toDispatch();for (int i = 0; i < pos; i+) Dis
15、patch.call(selection, "MoveLeft");/* 把选定的内容或者插入点向右移动* param pos* 移动的距离*/public void moveRight(int pos) if (selection = null)selection = Dispatch.get(word, "Selection").toDispatch();for (int i = 0; i < pos; i+)Dispatch.call(selection, "MoveRight");/* 把插入点移动到文件首位置*/pub
16、lic void moveStart() if (selection = null)selection = Dispatch.get(word, "Selection").toDispatch();Dispatch.call(selection, "HomeKey", new Variant(6); /* 从选定内容或插入点开始查找文本* param toFindText* 要查找的文本* return boolean true-查找到并选中该文本,false-未查找到文本*/SuppressWarnings("static-access&qu
17、ot;)public boolean find(String toFindText) if (toFindText = null | toFindText.equals("")return false;/ 从selection所在位置开始查询Dispatch find = word.call(selection, "Find").toDispatch();/ 设置要查找的内容Dispatch.put(find, "Text", toFindText);/ 向前查找Dispatch.put(find, "Forward&quo
18、t;, "True");/ 设置格式Dispatch.put(find, "Format", "True");/ 大小写匹配Dispatch.put(find, "MatchCase", "True");/ 全字匹配Dispatch.put(find, "MatchWholeWord", "True");/ 查找并选中return Dispatch.call(find, "Execute").getBoolean();/* 把选定选定内
19、容设定为替换文本* param toFindText* 查找字符串* param newText* 要替换的内容* return*/public boolean replaceText(String toFindText, String newText) if (!find(toFindText)return false;Dispatch.put(selection, "Text", newText);return true;/* 全局替换文本* param toFindText* 查找字符串* param newText* 要替换的内容*/public void repl
20、aceAllText(String toFindText, String newText) while (find(toFindText) Dispatch.put(selection, "Text", newText);Dispatch.call(selection, "MoveRight");/* 在当前插入点插入字符串* param newText* 要插入的新字符串*/public void insertText(String newText) Dispatch.put(selection, "Text", newText);
21、/* param toFindText* 要查找的字符串* param imagePath* 图片路径* return*/public boolean replaceImage(String toFindText, String imagePath) if (!find(toFindText)return false;Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),"AddPicture", imagePath);return true; /* 全局替换图片* para
22、m toFindText* 查找字符串* param imagePath* 图片路径*/public void replaceAllImage(String toFindText, String imagePath) while (find(toFindText) Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),"AddPicture", imagePath);Dispatch.call(selection, "MoveRight");/* 在当前插
23、入点插入图片* param imagePath* 图片路径*/public void insertImage(String imagePath) Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),"AddPicture", imagePath);/* 合并单元格* param tableIndex* param fstCellRowIdx* param fstCellColIdx* param secCellRowIdx* param secCellColIdx*/pub
24、lic void mergeCell(int tableIndex, int fstCellRowIdx, int fstCellColIdx,int secCellRowIdx, int secCellColIdx) / 所有表格Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();/ 要填充的表格Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex).toDispatch();Dispatch fstC
25、ell = Dispatch.call(table, "Cell",new Variant(fstCellRowIdx), new Variant(fstCellColIdx).toDispatch();Dispatch secCell = Dispatch.call(table, "Cell",new Variant(secCellRowIdx), new Variant(secCellColIdx).toDispatch();Dispatch.call(fstCell, "Merge", secCell);/* 在指定的单元格里填
26、写数据* param tableIndex* param cellRowIdx* param cellColIdx* param txt*/public void putTxtToCell(int tableIndex, int cellRowIdx, int cellColIdx,String txt) / 所有表格Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();/ 要填充的表格Dispatch table = Dispatch.call(tables, "Item", new Va
27、riant(tableIndex).toDispatch();Dispatch cell = Dispatch.call(table, "Cell", new Variant(cellRowIdx),new Variant(cellColIdx).toDispatch();Dispatch.call(cell, "Select");Dispatch.put(selection, "Text", txt);/* 获得指定的单元格里数据* param tableIndex* param cellRowIdx* param cellColI
28、dx* return*/public String getTxtFromCell(int tableIndex, int cellRowIdx, int cellColIdx) / 所有表格Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();/ 要填充的表格Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex).toDispatch();Dispatch cell = Dispatch.call(tabl
29、e, "Cell", new Variant(cellRowIdx),new Variant(cellColIdx).toDispatch();Dispatch.call(cell, "Select");String ret = ""ret = Dispatch.get(selection, "Text").toString();ret = ret.substring(0, ret.length()-1); /去掉最后的回车符;return ret; /* 在当前文档拷贝剪贴板数据* param pos*/publ
30、ic void pasteExcelSheet(String pos) moveStart();if (this.find(pos) Dispatch textRange = Dispatch.get(selection, "Range").toDispatch();Dispatch.call(textRange, "Paste");/* 在当前文档指定的位置拷贝表格* param pos* 当前文档指定的位置* param tableIndex* 被拷贝的表格在word文档中所处的位置*/public void copyTable(String pos, int tableIndex) / 所有表格Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();/ 要填充的表格Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex).toDispatch();Dispatch range = Dispatch.get(table, "Range").toDispatch();Dispatch.call(range, &quo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 餐厨废弃物密闭化装置企业县域市场拓展与下沉战略研究报告
- 钛钢复合板企业ESG实践与创新战略研究报告
- 中空棉企业ESG实践与创新战略研究报告
- 养生药膳食材配送中心行业深度调研及发展战略咨询报告
- 金属制电力船舶企业ESG实践与创新战略研究报告
- HBC电池正面化学钝化技术研究
- 水泥代购合同范本
- 租仪器合同范本
- 房门售后合同范本
- 机器抵押合同范本
- 上市公司廉洁自律协议书
- JBT 14714-2024 锂离子电池X射线检测设备(正式版)
- DL-T1362-2014输变电工程项目质量管理规程
- 2023年公务员考试青冈县《行政职业能力测验》全真模拟试卷含解析
- 患者管道滑脱危险因素评估及护理措施表
- 部编版小学一年级语文下册《春夏秋冬》课件
- 中国烟草总公司郑州烟草研究院笔试试题2023
- 建设法规(全套课件)
- 心衰患者的容量管理中国专家共识-共识解读
- 个人投资收款收据
- 新生儿常见仪器的使用与维护 课件
评论
0/150
提交评论