/** * 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); } }
相关推荐
JAVA使用Jacob提取Word信息,一个很好的范例,帮助你简化书写流程
在这个“Jacob操作word文档的方法集”中,我们将探讨如何使用Jacob 1.5版本来创建和操作Word文档,特别是创建目录。 首先,为了使用Jacob,你需要在你的项目中添加Jacob的jar文件。这通常涉及到将库添加到项目的类...
接下来,我们将介绍如何在Java代码中使用Jacob来操作MS Word: 1. 引入Jacob库:在你的Java项目中,添加Jacob的jar包到类路径中。如果是Maven项目,可以在pom.xml文件中添加如下依赖: ```xml <groupId>...
本文主要探讨如何使用Java-JACOB来创建和操作Word文档。 首先,使用JACOB之前,确保你的系统中已经安装了Microsoft Office,并且配置了相应的COM组件。JACOB本身是一个开源项目,可以在SourceForge上找到...
Java使用Jacob库通过Word模板生成Word文档是一种常见的技术实践,特别是在需要自定义生成大量结构化报告的场景下。本项目实例提供了一个完整的解决方案,可以直接在MyEclipse环境中运行。下面将详细讲解这个项目的...
Jacob 操作 Word 文档详解 Jacob 操作 Word 文档概述 Jacob 是一个 Java 库,用于访问和操作 Microsoft Office ... Jacob 库是一个功能强大且易于使用的库,它可以帮助 Java 开发者快速地实现 Word 文档的操作。
下面将详细阐述如何使用Jacob库在Java中操作Word,并结合描述中的信息,探讨项目的结构和功能。 首先,Jacob库的使用需要在Windows环境下,因为它依赖于COM组件。在Java项目中,你需要添加Jacob的jar文件到类路径中...
读取word文件的内容,并将内容返回为String类型!
java操作word 超简单实用:第一步: 引入包jacob.jar 第二步:参考工具类MsWordTool.java 含概基本WORD 所有操作方法 【特别难点】解决实例: 1)word书签内容替换后,书签会丢失问题 2)word定点批量插入图片...
Java是一种广泛使用的编程语言,它在处理各种任务时表现出强大的能力,其中之一就是操作Microsoft Office文档,尤其是Word文档。在Java中,有一种名为JACOB(Java COM Bridge)的库,它允许开发者通过Java代码调用...
Java 使用 Jacob 库将 Office 文件转换为 HTML 是一个常见的需求,尤其在自动化处理文档或在线预览场景中。Jacob(Java and COM Bridge)是一个 Java 库,它允许 Java 应用程序通过 COM(Component Object Model)...
下面我们将详细探讨如何使用Java和jacob库来处理Word文档。 首先,`MsWordUtils.java`可能是一个包含具体操作Word文档方法的工具类,例如打开文档、读取内容、修改内容、保存文档等。这些方法通常会利用jacob库提供...
为了方便地使用Java操作Word文档,可以使用Jacob官方提供的`MSWordManager`类。这个类封装了大多数Java操作Microsoft Office的功能,使得开发者能够更加简单高效地完成任务。 #### 示例代码 以下是一个简化的Java...
### Java使用JACOB将Word转为PDF:详解与实践 #### 一、配置环境与原理简介 在Java中利用JACOB库实现Word文档转PDF功能时,首先需要完成必要的环境配置工作。 ##### 1. JACOB库介绍 JACOB(Java COM Bridge)是一...
Jacob库在Java中用于操作Microsoft Office应用程序,如Word、Excel等。这个库是Java和COM接口之间的桥梁,允许Java程序能够调用COM组件,从而实现对Office文档的创建、编辑和格式化等功能。在给定的代码片段中,`...
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目录下,也是可以正常...
本教程将详细介绍如何使用Java结合Jacob库将Microsoft Word文档转换为PDF格式,确保转换后的文件保持原格式的完美性。Jacob是一个Java到COM桥接库,允许Java应用程序访问COM组件,如Microsoft Office。 首先,我们...
本文将深入探讨如何使用Jacob库来操作Word和Excel,通过提供的示例文档,我们将理解如何进行文件转换和其他操作。 首先,Jacob全称为Java COM Bridge,是一个Java到COM(Component Object Model)桥接器,它使得...