`
feohoo
  • 浏览: 112507 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

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

 

 

分享到:
评论
1 楼 82055185 2011-06-05  
将对应的包房在JDK HOME/BIN , 那些是对应的包?

相关推荐

    java操作word(包含书签插值)

    在JACOB中,使用`ActiveXComponent`实例化Word应用,然后调用`invoke()`方法执行各种操作,如打开文档、设置书签内容、保存和关闭文档。 5. **合同制作与生成** 在合同制作场景中,通常会有固定的模板,需要填充...

    java实现向word文档中插入柱状图,并更改颜色

    在Java编程环境中,我们经常需要处理各种文档格式,如Word(.docx)。这个场景涉及到在Word文档中插入图表,特别是柱状图,并且能够自定义颜色,这在数据分析、报告生成或者数据可视化中非常常见。下面我们将详细...

    java2word 文档

    b) **图片插入**:在固定书签位置插入图片,可以预先在Word文档中设置好书签,然后通过Java2Word API将图片数据插入到指定的书签位置,实现图文混排。 c) **多文档合并**:Java2Word还支持将多个Word文档合并成一...

    java给word文档插入水印并设置保护密码

    总的来说,Java通过JACOB库可以有效地处理Word文档的复杂操作,如插入水印和设置保护密码,从而满足OA系统的需求。在实际开发中,应确保正确处理异常,并考虑性能优化,比如关闭Word应用程序时确保所有资源已释放。

    java 实现 word 文档的在线预览

    在Java开发中,实现Word文档的在线预览是一项常见的需求,尤其在企业级应用中,例如文档管理系统或者协同办公平台。这项功能可以让用户无需下载原始文件就能查看文档内容,提高工作效率并减少服务器存储压力。本资源...

    DocX类操作WORD文档——把图片插入到书签指定位置

    通过DocX,我们可以轻松地对Word文档进行样式设置、段落操作、图片插入等操作,而无需安装Microsoft Office。 要实现"把图片插入到书签指定位置",我们首先需要获取到书签的位置。在Word文档中,书签是一个可以用来...

    Java 添加Word目录的2种方法示例代码详解

    Java 添加 Word 目录的 2 种方法示例代码详解 在本文中,我们将探讨 Java 中添加 Word 目录的两种方法。目录是一种能够快速、有效地帮助读者了解文档或书籍主要内容的方式。在 Word 中,插入目录首先需要设置相应...

    java2Word在Word任意位置插入图片

    由于项目需要,苦苦对Java操作Word进行了一番研究,包括当下比较流行的java2Word、jacob、POI、itext等,只能说各有千秋,但是没有一个是完全适合我的,没有办法,只能去各种尝试,在研究了java2Word这个jar包的API...

    java 根据word模板生成word 文档

    `Java2word`类是实现Word文档生成的核心,其设计考虑了模板替换、图片插入以及表格数据填充等多种需求,通过HashMap对象来传递数据,其中键代表Word模板中待替换的字段,值则是用于替换的具体内容。 - **模板字段...

    jacob实现文档插入到word中

    总结来说,Java Jacob提供了一个有效的方式,让开发者能够使用Java语言直接操作Word,实现诸如插入文档等功能。通过理解COM交互机制和Jacob的API,你可以构建出强大的文档处理应用。不过,由于Jacob依赖于Windows和...

    java生成word文档完美解决方案.

    在Java开发中,生成Word文档是一项常见的需求,例如在报告生成、数据导出或合同制作等场景。要实现这一功能,我们需要了解相关的API和技术。本文将深入探讨如何使用Java实现Word文档的完美生成,包括主要的技术框架...

    Java 替换word文档文字并指定位置插入图片

    Java 替换 word 文档文字并指定位置插入图片是 Java 语言中的一项重要功能,通过使用 Apache POI 和 docx4j 两个库,可以实现对 Word 文档的操作,包括替换文字和插入图片。本文将通过实例代码详细介绍如何使用 Java...

    java填充word文档(带有富文本).zip

    Java填充Word文档(带有富文本)是一项常见的任务,在软件开发中尤其重要,特别是在自动化报告生成、数据导出或个性化文档创建等场景下。这个压缩包"ExpordWord-master"很可能包含了一个Java项目,用于演示如何在...

    JAVA 导出WORD

    这个项目可能包括了构建文件(如pom.xml)、源代码文件(如JavaWord.java)以及其他必要的配置。 标签中的"java导出word文档"、"jacob word导出"和"word导出图"暗示了这个项目可能还涵盖了在Word文档中插入图片的...

    java_jacob_操作word_文档

    ### Java Jacob 操作 Word 文档知识点详解 #### 一、Java Jacob 库介绍与...通过以上介绍,我们了解到使用 Java Jacob 库操作 Word 文档的具体方法和注意事项,这对于自动化办公任务、文档生成等应用场景非常有用。

    java使用POI操作Word文档,写入文字与图片

    总的来说,Apache POI为Java开发者提供了一种强大且灵活的方式来操作Word文档,无论是简单地写入文字还是复杂的格式化操作,甚至是插入图片和图表,都能轻松应对。通过熟练掌握POI库,你可以创建自动化报告、动态...

    Java利用poi对word插入文字图片

    本项目“Java利用poi对word插入文字图片”是一个具体的示例,旨在教给你如何使用Apache POI API在Word文档中插入文字和图片。下面将详细阐述相关的知识点。 首先,Apache POI提供了HWPF(Horrible Word Processor ...

    java生成word,包括word表格,表格插入图片,jar包都在了

    Java生成Word文档是一种常见的需求,特别是在企业级应用中,例如报告生成、数据导出等。在Java中,我们可以使用各种库来实现这个功能,比如Apache POI,它是一个开源项目,提供了API来处理Microsoft Office格式的...

    java替换word中的变量

    这两个库都提供了操作Word文档内容的方法,包括替换文本。 对于.doc文件,我们通常使用HWPFDocument和Range类。以下是一个简单的例子: ```java import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi....

    java实现word表格指定位置盖章,并且设置印章悬浮于文字之上

    在Java编程环境中,实现Word文档中的表格指定位置盖章,并让印章悬浮于文字之上,是一项技术挑战,但可以通过一些库和技巧来实现。这个过程主要涉及到对Word文档内容的读取、修改以及重新保存,同时要确保印章图像不...

Global site tag (gtag.js) - Google Analytics