- 浏览: 109828 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
feohoo:
忘记署名原文地址,特申明,请谅解。原文地址:http://ww ...
最新Apache+Tomcat集群配置 -
悲剧了:
http://www.iteye.com/topic/1017 ...
最新Apache+Tomcat集群配置 -
lg_asus:
Hello, I solve my question .
ti ...
XML reffers to not existing parent error of dhtml -
lg_asus:
Hello, I also encounter the sam ...
XML reffers to not existing parent error of dhtml -
82055185:
将对应的包房在JDK HOME/BIN , 那些是对应的包?
Java操作word文档,设置用户名,痕迹保留,插入等方法
1.使用jacob进行操作,点击后面连接下载http://danadler.com/jacob/jacobSrc_17.zip
2.将对应的包房在JDK HOME/BIN ,JRE/BIN下面去,如果还要提示错误的话请下载本文附件JAVA2WORD,国产非开源免费工具,直接安装。
3.编辑代码如下,有点懒没整理:
package app.util; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import com.jacob.com.Variant; public class WordBean { // word文档 private Dispatch doc; // word运行程序对象 private ActiveXComponent word; // 所有word文档集合 private Dispatch documents; // 选定的范围或插入点 private Dispatch selection; private boolean saveOnExit = true; public WordBean() throws Exception { if (word == null) { word = new ActiveXComponent("Word.Application"); word.setProperty("Visible", new Variant(false)); // 不可见打开word word.setProperty("AutomationSecurity", new Variant(3)); // 禁用宏 } if (documents == null) documents = word.getProperty("Documents").toDispatch(); } /** * 重载,制定文档用户名称,主要用于痕迹保留时候显示对应的用户 * @param username * @throws Exception */ public WordBean(String username) throws Exception { if (word == null) { word = new ActiveXComponent("Word.Application"); word.setProperty("UserName", new Variant(username)); word.setProperty("Visible", new Variant(false)); // 不可见打开word word.setProperty("AutomationSecurity", new Variant(3)); // 禁用宏 } if (documents == null) documents = word.getProperty("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 = Dispatch.get(word, "Selection").toDispatch(); } /** * * 打开一个已存在的文档 * * * * @param docPath * */ public void openDocument(String docPath) { closeDocument(); doc = Dispatch.call(documents, "Open", docPath).toDispatch(); Dispatch.put(doc, "TrackRevisions", new Variant(true)); Dispatch.put(doc, "PrintRevisions", new Variant(true)); Dispatch.put(doc, "ShowRevisions", new Variant(true)); selection = Dispatch.get(word, "Selection").toDispatch(); } /** * * *只读 打开一个保护文档, * * * @param docPath-文件全名 * * @param pwd-密码 * */ public void openDocumentOnlyRead(String docPath, String pwd) throws Exception { closeDocument(); doc = Dispatch.callN( documents, "Open", new Object[] { docPath, 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) throws Exception { closeDocument(); doc = Dispatch.callN( documents, "Open", new Object[] { docPath, new Variant(false), new Variant(false), new Variant(true), pwd }).toDispatch(); selection = Dispatch.get(word, "Selection").toDispatch(); } /** * * 把选定的内容或插入点向上移动 * * * * @param pos * * 移动的距离 * */ public void moveUp(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, "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++) { Dispatch.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"); } /** * * 把插入点移动到文件首位置 * * */ public 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") 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", "True"); // 设置格式 Dispatch.put(find, "Format", "True"); // 大小写匹配 Dispatch.put(find, "MatchCase", "True"); // 全字匹配 Dispatch.put(find, "MatchWholeWord", "True"); // 查找并选中 return Dispatch.call(find, "Execute").getBoolean(); } /** * * 把选定选定内容设定为替换文本 * * * * @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 replaceAllText(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); } /** * * * * * @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; } /** * * 全局替换图片 * * * * @param 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"); } } /** * * 在当前插入点插入图片 * * * * @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 * */ public 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 fstCell = 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); } /** * * 在指定的单元格里填写数据 * * * * @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 Variant(tableIndex)) .toDispatch(); Dispatch cell = Dispatch.call(table, "Cell", new Variant(cellRowIdx), new Variant(cellColIdx)).toDispatch(); Dispatch.call(cell, "Select"); Dispatch.put(selection, "Text", txt); } public void closeDocument() { if (doc != null) { // Dispatch.call(doc, "ShowRevisions", new Variant(saveOnExit)); Dispatch.call(doc, "Save"); Dispatch.call(doc, "Close", new Variant(saveOnExit)); doc = null; } } /** */ /** * 关闭全部应用 * */ public void close() { closeDocument(); if (word != null) { Dispatch.call(word, "Quit"); word = null; } selection = null; documents = null; } /** */ /** * 打印当前word文档 * * * * */ public void printFile() { if (doc != null) { Dispatch.call(doc, "PrintOut"); } } /** * * 获得指定的单元格里数据 * * * * @param tableIndex * * @param cellRowIdx * * @param cellColIdx * * @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(table, "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 * */ public 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, "Copy"); if (this.find(pos)) { Dispatch textRange = Dispatch.get(selection, "Range").toDispatch(); Dispatch.call(textRange, "Paste"); } } /** * * 在当前文档指定的位置拷贝来自另一个文档中的表格 * * * * @param anotherDocPath * * 另一个文档的磁盘路径 * * @param tableIndex * * 被拷贝的表格在另一格文档中的位置 * * @param pos * * 当前文档指定的位置 * */ public void copyTableFromAnotherDoc(String anotherDocPath, int tableIndex, String pos) { Dispatch doc2 = null; try { doc2 = Dispatch.call(documents, "Open", anotherDocPath) .toDispatch(); // 所有表格 Dispatch tables = Dispatch.get(doc2, "Tables").toDispatch(); // 要填充的表格 Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex)).toDispatch(); Dispatch range = Dispatch.get(table, "Range").toDispatch(); Dispatch.call(range, "Copy"); if (this.find(pos)) { Dispatch textRange = Dispatch.get(selection, "Range") .toDispatch(); Dispatch.call(textRange, "Paste"); } } catch (Exception e) { e.printStackTrace(); } finally { if (doc2 != null) { Dispatch.call(doc2, "Close", new Variant(saveOnExit)); doc2 = null; } } } }
4.原文部分源码来源于:http://www.blogjava.net/jinn/archive/2008/07/18/215709.html保留作者权利
5.参考文档有:http://home.searchfull.net:8080/2428009-jacob+%E6%93%8D%E4%BD%9C+word+.html 保留作者权利
6.jccob官网:http://danadler.com/jacob/
注意:如果你使用的IDE能启动tomcat这样的服务器,同时你使用组件是在J2EE程序中,可能运行报错,处理方式,单独启动服务器,不要使用IDE启动服务器,然后OK
- Java2Word1.1BInstall.rar (247.9 KB)
- 下载次数: 55
发表评论
-
开源集锦秀
2011-06-12 16:12 1464原文转载自: http://coolshell.cn/arti ... -
正则表达式收集-方便用的时候自己来拼了
2011-02-21 16:56 755验证数字的正则表达式集 验证数字:^[0-9]*$ ... -
第 6 章 jPDL
2010-11-09 16:28 1272这章将会解释用来描 ... -
线程安全,就这么简单
2005-04-29 09:33 9251、什么是线程安全(threa ... -
log4j指南
2007-03-30 17:20 670log4j是java开发人员开发中最常用的日志 ... -
深入浅出URL编码
2007-07-03 15:14 710一、问题: ... -
如何实现网站的多语言版本?
2008-01-15 15:03 1335随着国际化的深入,越来越多的网站提供多语言版本给 ... -
在jsp下,一个实现将动态页面转为静态的方案
2005-08-27 21:04 7341.前言为了能深入浅出 ... -
用EclipseUML体验用ECLIPSE建模- -
2005-08-29 13:09 2759用EclipseUML体验用ECLIPSE建模MODEL(如C ... -
java
2005-08-29 13:16 940[2005-08-27]经典java问题,你能答出几个?第一, ... -
献给初学者:Java咖啡的奶茶——Eclipse
2005-08-29 13:18 805铁匠以打造自己的工具 ... -
jsp使用组件进行文件上传
2008-04-15 17:38 2506WEB文件上传可能是网站 ... -
利用JAVA操作EXCEL文件
2008-06-04 14:51 687使用Windows操作系统的朋友对Excel(电子表格)一定不 ...
相关推荐
java操作word可操作书签,在word模板文档上设置书签,然后从数据库中查询数据,填充到word文档书签位置,刚拿到需求时,使劲在网上找资料。幻想第三方jar包,帮我实现。有Apatch的POI,java2word,jcob等,一直让我无法...
java实现向word文档中插入柱状图,并更改颜色。 将docx转化为xml文件在进行操作
用Java读取Word文档
java 操作word文档 java 操作word文档java 操作word文档 read word write word
java操作word文档 包含向word书签里插入值 java操作word模板
该组件提供了一组简单的接口,以便java程序调用他的服务操作Word 文档。 这些服务包括: 打开文档、新建文档、 查找文字、替换文字, 插入文字、插入图片、插入表格, 在书签处插入文字、插入图片、插入表格等。 ...
java 实现 word 文档的在线预览,资源包含代码和jar包,下载放入项目既可以使用
Java对PageOffice编程,从空白的word模板动态生成word文件,填充文本内容、图片,同时设置文本的字体、段落、格式。 PageOffice是标准Java组件,标准JSP Tag标签方式引用,完美支持Eclipse、MyEclipse等开发工具。 ...
由于项目需要,苦苦对Java操作Word进行了一番研究,包括当下比较流行的java2Word、jacob、POI、itext等,只能说各有千秋,但是没有一个是完全适合我的,没有办法,只能去各种尝试,在研究了java2Word这个jar包的API...
经常做Oa系统的人,难免经常遇到word文档处理的问题,现在针对已经存在的word文档,需要添加水印,设置保护信息,防止别人下载后更改文档内容
本人编写的用java 实现对word文档的新建,打开,写入保存。需要包含poi外包实现。
本代码实现使用Java程序读取word文档成网页,将word文档按原样在网页输出。项目编码为UTF-8,文件编码也是utf8,再不要说乱码这种骚话了,选择utf8加载项目就不会乱码
java jacob操作word,往word中插入文档文件等等功能webservice
Java通过word模板配置书签生成word,这个是公司内部代码直接可以运行
此文件主要包括了通过java给Word文档添加项目符号以及项目编号列表的代码示例,以及操作代码所需要的类库、组件等。
整理了用java如何读取word文档,pdf文档的几种方法,含有程序
java读取不同版本文档的内容以及字体大小,实现对文档格式进行匹配!
此程序主要展示了如何把图片插入事先设定好的书签位置之中。 下载之后可以直接运行。
java实现word文档到xml文档转换浅析
Java实现XML文档到word文档转换