知识大全 Java调用com组件操作word使用总结

Posted 表格

篇首语:我们用人生最好的年华做抵押,去担保一个说出来都会被人嘲笑的梦想。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java调用com组件操作word使用总结相关的知识,希望对你有一定的参考价值。

Java调用com组件操作word使用总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  一 准备工作

  先了解一下概念 JACOB 就是 JAVA Bridge的缩写 提供自动化的访问的功能 也是通过JNI功能访问windows平台下的组件或者win 系统库的 这是一个开始于 年的开源项目的成果 有很多使用者对该项目进行了修改 做出了自己的贡献

  Jacob下载地址 ?group_id= &package_id=

  我在这里下载了Jacob 和jacob 的版本两个版本

  这里下载的是目前最新的Jacob 的Release版

  另外java操作word方式还有(个人认为通过jacob最好 自己可以扩展 网上除poi之外几乎全是java 技术实现的):

  ( ):Apache POI Java API To Access Microsoft Format Files();对word处理不够强处理Excel功能可以 但是全是通过java完成的 不需 要组件支持;

  ( ):java word 是一个在java程序中调用 MS Office Word 文档的组件(类库) 该组件提供了一组简单的接口 以便java程序调用他的服务操作Word 文档 (好象也是用的java 技术);

  ( )web开发语言操作word的功能最好还是用第三方的控件 看看这个SOAOFFICE 还可以使用js 写VBA呢

  二 安装Jacob

  Jacob的安装非常的简单 我们解开下载的jacob_ zip 在文件夹中找到jacob dll和jacob jar两个文件 如果是 Jacob 则是jacob x dll( 位 机和jacob x dll( 位)和 jacob jar两个文件 Jacob dll直接放到系统的system 文件夹下就行了 连注册都不用的(或者拷贝到jdk或者jre的bin目 录下也行 当前测试文件所在的目录也行 就是只要在java library path中就可以) 而jacob jar设置到classpath中去就 可以了 或者在IDE开发环境的工程中设置扩展库也一样的 我是这样使用的将jacob x dll或复制 到%Tomcat %\\bin目录下将jacob jar复制到%Tomcot %\\Share\\lib目录下 我使用过程中感觉放到这里是一个最终解决 办法 当你放哪都有问题的时候 我这样用之后再没有出过因为系统不一样出现的各种各样的问题 当然你作的是web的项目

  注意使用jacob一写要安装word 我装的word 如果是操作word 就不用jacob了(好像这方面的API)

  对jacob dll几种配置方法 (网上看到)

   : :

   把jacob dll文件 复制到 windows\\system 目录下 (注 我用的时候这个方法不能运行)

   把jacob dll放入 Java\\jdk _ \\jre\\bin目录下 把jacob jar放入 Java\\jdk _ \\jre\\lib\\ext目录下 可以正常运行

   把jacob dll放入 \\glc\\src目录下 把jacob jar放入WEB INF\\lib目录下 也是可以正常运行

  三 使用(以下是我改写的一个word操作类 希望有兴趣的朋友完善 记得发给我一份)

  //注意java操作word关键是定位操作对象;

  import 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;

  public WordBean()throws Exception

  if (word == null)

  word = new ActiveXComponent( Word Application );

  word setProperty( Visible new Variant(false)); //不可见打开word

  word setProperty( AutomationSecurity new Variant( )); //禁用宏

  

  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();

  selection = Dispatch get(word Selection ) toDispatch();

  

  /**

  *只读 打开一个保护文档

  * @param docPath 文件全名

  * @param pwd 密码

  */

  public void openDocumentOnlyRead(String docPath String pwd)throws Exception

  closeDocument();

  // doc = Dispatch invoke(documents Open Dispatch Method

  // new Object[]docPath new Variant(false) new Variant(true) new Variant(true) pwd

  // new int[ ]) toDispatch();//打开word文件

  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 = ; 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 = ; 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 = ; 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 = ; 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( ));

  

  /**

  * 从选定内容或插入点开始查找文本

  *

  * @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);

  

  /**

  * 获得指定的单元格里数据

  *

  * @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( ret length() ); //去掉最后的回车符;

  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 doc = null;

  try

  doc = Dispatch call(documents Open anotherDocPath)

   toDispatch();

  // 所有表格

  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 );

  

   catch (Exception e)

  e printStackTrace();

   finally

  if (doc != null)

  Dispatch call(doc Close new Variant(saveOnExit));

  doc = null;

  

cha138/Article/program/Java/hx/201311/26342

相关参考

知识大全 java抽取word,pdf的四种武器

  chris()  毕业于中国人民大学信息学院  年月    很多人用java进行文档操作时经常会遇到一个问题就是如何获得wordexcelpdf等文档的内容?我研究了一下在这里总结一下抽取word

知识大全 Java操作Word,Excel,Access,IE,OutLook, PDF 等

Java操作Word,Excel,Access,IE,OutLook,PDF等  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,

知识大全 java操作word

  最近在做项目的时候需要这么一个功能客户有一大堆word格式的模板需要我们用程序向模板里面填充一些数据如果是直接重新写一个Word用POI或Itext都可以搞定关键是读取并解析而且Word里有表格图

知识大全 如何在java中操作word

  想用java操作word文件?jacob是个不错的选择也就是java桥你可以在project/下载我下载的版本是注意版本太低的话可能会报错  如果没有特殊需求可以直接使用jacob_*zip中提供

知识大全 java对word、excel、pdf等操作综合文章

  Java操作PDFJava操作WordExcelAccess参考:?forum=&thread=&tstart=&trange=JavaExcelAPI文档一个jacob操

知识大全 Java多线程操作相关问题总结

Java多线程操作相关问题总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Java WS和C#调用

JavaWS和C#调用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  互操作性是WebServi

知识大全 JAVA IO操作总结——节点流和处理流

JAVAIO操作总结——节点流和处理流  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  按照流是否

知识大全 如何在ASP代码中调用VB组件的方法

如何在ASP代码中调用VB组件的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本篇文章通过

知识大全 调用IE内置打印组件完成web打印方案及例程

调用IE内置打印组件完成web打印方案及例程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  重点