/** * word文档 */ Dispatch doc = null; /** * word运行程序对象s */ private ActiveXComponent word; /** * 所有word文档 */ private Dispatch documents; /** * 构造函数 */ public OperatorWordUtilService() { if(word==null){ word = new ActiveXComponent("Word.Application"); word.setProperty("Visible",new Variant(false)); } if(documents==null) documents = word.getProperty("Documents").toDispatch(); saveOnExit = false; } /** * 设置参数:退出时是否保存 * @param saveOnExit boolean true-退出时保存文件,false-退出时不保存文件 */ public void setSaveOnExit(boolean saveOnExit) { this.saveOnExit = saveOnExit; } /** * 得到参数:退出时是否保存 * * @return boolean true-退出时保存文件,false-退出时不保存文件 */ public boolean getSaveOnExit() { return saveOnExit; } /** * 打开文件 * @param inputDoc String 要打开的文件,全路径 * @return Dispatch 打开的文件 */ public Dispatch open(String inputDoc) { return Dispatch.call(documents,"Open",inputDoc).toDispatch(); // return Dispatch.invoke(documents,"Open",Dispatch.Method,new // Object[]{inputDoc},new int[1]).toDispatch(); } /** * 选定内容 * @return Dispatch 选定的范围或插入点 */ public Dispatch select() { return word.getProperty("Selection").toDispatch(); } /** * 把选定内容或插入点向上移动 * @param selection Dispatch 要移动的内容 * @param count int 移动的距离 */ public void moveUp(Dispatch selection,int count) { for(int i = 0;i < count;i ++) Dispatch.call(selection,"MoveUp"); } /** * 把选定内容或插入点向下移动 * @param selection Dispatch 要移动的内容 * @param count int 移动的距离 */ public void moveDown(Dispatch selection,int count) { for(int i = 0;i < count;i ++) Dispatch.call(selection,"MoveDown"); } /** * 把选定内容或插入点向左移动 * @param selection Dispatch 要移动的内容 * @param count int 移动的距离 */ public void moveLeft(Dispatch selection,int count) { for(int i = 0;i < count;i ++) { Dispatch.call(selection,"MoveLeft"); } } /** * 把选定内容或插入点向右移动 * @param selection Dispatch 要移动的内容 * @param count int 移动的距离 */ public void moveRight(Dispatch selection,int count) { for(int i = 0;i < count;i ++) Dispatch.call(selection,"MoveRight"); } /** * 把插入点移动到文件首位置 * @param selection Dispatch 插入点 */ public void moveStart(Dispatch selection) { Dispatch.call(selection,"HomeKey",new Variant(6)); } /** * 从选定内容或插入点开始查找文本 * @param selection Dispatch 选定内容 * @param toFindText String 要查找的文本 * @return boolean true-查找到并选中该文本,false-未查找到文本 */ public boolean find(Dispatch selection,String toFindText) { // 从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 selection Dispatch 选定内容 * @param newText String 替换为文本 */ public void replace(Dispatch selection,String newText) { // 设置替换文本 Dispatch.put(selection,"Text",newText); } /** * 全局替换 * @param selection Dispatch 选定内容或起始插入点 * @param oldText String 要替换的文本 * @param newText String 替换为文本 */ public void replaceAll(Dispatch selection,String oldText,Object replaceObj) throws Exception{ // 移动到文件开头 moveStart(selection); if(oldText.startsWith("table") || replaceObj instanceof ArrayList){ replaceTable(selection,(ArrayList)replaceObj); }else{ String newText = (String) replaceObj; if(newText==null) newText=""; //if(oldText.indexOf("image") != -1&!newText.trim().equals("") || newText.lastIndexOf(".bmp") != -1 || newText.lastIndexOf(".jpg") != -1 || newText.lastIndexOf(".gif") != -1){ if(oldText.indexOf("image")!= -1){ while(find(selection,oldText)) { if(oldText.indexOf("image1")>0){ replaceImage(selection,newText,500,370); }else{ replaceImage(selection,newText); } Dispatch.call(selection,"MoveRight"); } }else{ while(find(selection,oldText)) { replace(selection,newText); Dispatch.call(selection,"MoveRight"); } } } } /** * 替换图片 * @param selection Dispatch 图片的插入点 * @param imagePath String 图片文件(全路径) */ public void replaceImage(Dispatch selection,String imagePath) { Dispatch image = Dispatch.call( Dispatch.get(selection, "InlineShapes").toDispatch(),// InLineShapes是一个类 "AddPicture", imagePath).toDispatch();// addpicture是其中的一个方法 } /** * 替换图片 * @param selection Dispatch 图片的插入点 * @param imagePath String 图片文件(全路径) * @param width 宽度 * @param height 高度 */ public void replaceImage(Dispatch selection,String imagePath,float width,float height) { Dispatch image = Dispatch.call( Dispatch.get(selection, "InlineShapes").toDispatch(),// InLineShapes是一个类 "AddPicture", imagePath).toDispatch();// addpicture是其中的一个方法 Dispatch.put(image, "Width", new Variant(width)); Dispatch.put(image, "Height", new Variant(height)); } /** * 向表格添加内容 * @param selection Dispatch 插入点 * @param fields list 数据 */ public void replaceTable(Dispatch selection,List dataList) throws Exception { Dispatch tables = Dispatch.get(doc, "Tables").toDispatch(); Dispatch table = Dispatch.call(tables, "Item", new Variant(1)).toDispatch(); Dispatch rows = Dispatch.get(table, "Rows").toDispatch(); int rowsCount = Dispatch.get(rows, "Count").getInt(); Dispatch Columns = Dispatch.get(table, "Columns").toDispatch(); int Columnscount = Dispatch.get(Columns, "Count").getInt(); for (int i = 1; i < rowsCount + 1; i++) { for (int j = 2; j < Columnscount + 1; j++) { Dispatch cell = Dispatch.call(table, "Cell", i + "", j + "").toDispatch(); Dispatch innerTables = Dispatch.get(cell, "Tables").toDispatch(); int innerTablesCount = Dispatch.get(innerTables, "Count").getInt(); for(int k=0;k<innerTablesCount;k++){ Dispatch innerTable = Dispatch.call(innerTables, "Item", new Variant(k+1)).toDispatch(); Dispatch innerRows = Dispatch.get(innerTable, "Rows").toDispatch(); int innerRowsCount = Dispatch.get(innerRows, "Count").getInt(); Dispatch innerColumns = Dispatch.get(innerTable, "Columns").toDispatch(); int innerColumnscount = Dispatch.get(innerColumns, "Count").getInt(); if(innerColumnscount == 2 && innerRowsCount == 2){ for (int m = 0; m < dataList.size(); m++) { // 某一行数据 String[] datas = (String[]) dataList.get(m); // 在表格中添加一行 if (innerRowsCount < m+2) Dispatch.call(innerRows, "Add"); // 填充该行的相关列 for (int n = 0; n < datas.length; n++) { // 得到单元格 Dispatch innerCell = Dispatch.call(innerTable, "Cell",(m+2) + "", (n+1) + "").toDispatch(); // 选中单元格 Dispatch.call(innerCell, "Select"); // 设置格式 Dispatch font = Dispatch.get(selection, "Font").toDispatch(); Dispatch.put(font, "Bold", "0"); Dispatch.put(font, "Italic", "0"); // 输入数据 Dispatch.put(selection, "Text", datas[n]); } } } } } } } /** * 保存文件 * @param outputPath String 输出文件(包含路径) */ public void save(String outputPath) { Dispatch.call(Dispatch.call(word,"WordBasic").getDispatch(),"FileSaveAs",outputPath); } /** * 关闭文件 * @param document Dispatch 要关闭的文件 */ public void close(Dispatch doc) { Dispatch.call(doc,"Close",new Variant(saveOnExit)); word.invoke("Quit",new Variant[]{}); word = null; } /** * 根据模板、数据生成word文件 * @param inputPath String 模板文件(包含路径) * @param outPath String 输出文件(包含路径) * @param data HashMap 数据包(包含要填充的字段、对应的数据) */ public void toWord(String inputPath,String outPath,HashMap data) { String oldText; Object newValue; try { if(doc==null) doc = open(inputPath); Dispatch selection = select(); Iterator keys = data.keySet().iterator(); while(keys.hasNext()) { oldText = (String) keys.next(); newValue = data.get(oldText); replaceAll(selection,oldText,newValue); } save(outPath); } catch(Exception e) { System.out.println("操作word文件失败!"); e.printStackTrace(); } finally { if(doc != null) close(doc); } }
相关推荐
如果你要对 MS Word、Excel 进行处理,JACOB 是一个好的选择。JACOB目前已经成为sourceforge(http://sourceforge.net/projects/jacob- project/)的一个开源项目,本文使用的版本是1.10.1。 这篇文章可能不能完全...
JAVA使用jacob操作MS word ,要将jacob.dll放到系统文件夹下面,
JAVA使用Jacob提取Word信息,一个很好的范例,帮助你简化书写流程
java使用jacob将word 转pdf
java使用jacob工具操作word文档,读取写入文档。详细的介绍使用方式。
java使用jacob将word,excel,ppt转成html,代码和所需的jar都在压缩包,项目需求实现后分享下
java操作word 超简单实用:第一步: 引入包jacob.jar 第二步:参考工具类MsWordTool.java 含概基本WORD 所有操作方法 【特别难点】解决实例: 1)word书签内容替换后,书签会丢失问题 2)word定点批量插入图片...
2、 把jacob.dll放入 Java\jdk1.5.0_06\jre\bin目录下.把jacob.jar放入 Java\jdk1.5.0_0\jre\lib\ext 目录下.可以正常运行。 3、把jacob.dll放入 \glc\src目录下.把jacob.jar放入WEB-INF\lib目录下,也是可以正常...
读取word文件的内容,并将内容返回为String类型!
jacob jacob配置 java操作word java操作word:jacob(方法解析+环境配置)
jacob.jar: a JAR file for the java classes which you must add to your CLASSPATH. The package names replace com.ms with com.jacob (for example com.ms.com.Variant maps to com.jacob.com.Variant. jacob...
Jacob操作word 文档的方法集!(含创建目录),使用的Jacob版本是1.5
完整项目,直接可以导入到myeclipse中运行,代码有详细注释,在readme.txt文件里面有注意事项。
java Jacob完美实现word添加图片水印(内附源码及jar包)。 公司最近让搞Word文档添加水印,所有下载的文档需要添加公司印章,搞了好多天才实现,利用Jacob完美实现word添加图片水印(注意需要把dll文件放到jdk的bin...
java 使用jacob Word转PDF 完美格式,包内含有 jacob.jar包,office提供的SaveAsPDFandXPS.exe插件,以及源码、和步骤操作说明书
本文提供关于jacob配置的dll文件,java2word的运行安装文件,jacob和java2word整合jar包 ckedtior网页编辑器需要用的jar,以及使用整合后的jar对word进行插入图片、带格式文字段落、和导出word功能源码
最近因为项目的原因,整理了一下网上关于java对word文档操作的相关资料,资源中的代码绝大部分也是参考网上整理的。希望能对有java操作word这方面的需求的朋友一点参考和帮助。
java_jacob_操作word_文档,进行写操作.docx
jacob操作word文档
原代码 一个4天开发,完成80%的J2SE项目 有三层界面 部分方法进行了重构 可以输出表格 设置字体等 代码进行过实用测试