关于jacob读写word问题

这篇博客介绍了如何使用Jacob库在Java中创建、打开和编辑Word文档,包括设置页面布局、插入文本、替换内容、插入图片以及操作表格等。示例代码展示了如何创建新文档、设置页面边距、插入文本、替换文本、插入图片和合并单元格等功能。
摘要由CSDN通过智能技术生成

DOCWriter类:

import java.util.ArrayList;
import java.util.List;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

//import org.apache.log4j.Logger;

/**
 *
 *作用:利用jacob插件生成word 文件!
 *
 * @author weich
 *
 */
public class DOCWriter {

 /** 日志记录器 */
 //static private Logger logger = Logger.getLogger(DOCWriter.class);

 /** word文档
  *
  * 在本类中有两种方式可以进行文档的创建,<br>
  * 第一种调用 createNewDocument
  * 第二种调用 openDocument
  */
 private Dispatch document = null;

 /** word运行程序对象 */
 private ActiveXComponent word = null;

 /** 所有word文档 */
 private Dispatch documents = null;

 /**
  *  Selection 对象 代表窗口或窗格中的当前所选内容。 所选内容代表文档中选定(或突出显示)的区域,如果文档中没有选定任何内容,则代表插入点。
  *  每个文档窗格只能有一个Selection 对象,并且在整个应用程序中只能有一个活动的 Selection 对象。
  */
 private Dispatch selection = null;

 /**
  *
  * Range 对象 代表文档中的一个连续区域。 每个 Range 对象由一个起始字符位置和一个终止字符位置定义。
  * 说明:与书签在文档中的使用方法类似,Range 对象在 Visual Basic 过程中用来标识文档的特定部分。
  * 但与书签不同的是,Range对象只在定义该对象的过程运行时才存在。
  * Range对象独立于所选内容。也就是说,您可以定义和处理一个范围而无需更改所选内容。还可以在文档中定义多个范围,但每个窗格中只能有一个所选内容。
  */
 private Dispatch range = null;

 /**
  * PageSetup 对象 该对象包含文档的所有页面设置属性(如左边距、下边距和纸张大小)。
  */
 private Dispatch pageSetup = null;

 /** 文档中的所有表格对象 */
 private Dispatch tables = null;

 /** 一个表格对象 */
 private Dispatch table = null;

 /** 表格所有行对象 */
 private Dispatch rows = null;

 /** 表格所有列对象 */
 private Dispatch cols = null;

 /** 表格指定行对象 */
 private Dispatch row = null;

 /** 表格指定列对象 */
 private Dispatch col = null;

 /** 表格中指定的单元格 */
 private Dispatch cell = null;
 
 /** 字体 */
 private Dispatch font = null;
 
 /** 对齐方式 */
 private Dispatch alignment = null;

 /**
  * 构造方法
  */
 public DOCWriter() {
  ComThread.InitSTA();
  if(this.word == null){
   /* 初始化应用所要用到的对象实例 */
   this.word = new ActiveXComponent("Word.Application");
   /* 设置Word文档是否可见,true-可见false-不可见 */
   this.word.setProperty("Visible",new Variant(true));
   /* 禁用宏 */
   this.word.setProperty("AutomationSecurity", new Variant(3));
  }
  if(this.documents == null){
   this.documents = word.getProperty("Documents").toDispatch();
  }
 }

 /**
  * 设置页面方向和页边距
  *
  * @param orientation
  *            可取值0或1,分别代表横向和纵向
  * @param leftMargin
  *            左边距的值
  * @param rightMargin
  *            右边距的值
  * @param topMargin
  *            上边距的值
  * @param buttomMargin
  *            下边距的值
  */
 public void setPageSetup(int orientation, int leftMargin,int rightMargin, int topMargin, int buttomMargin) {
  
  //logger.debug("设置页面方向和页边距...");
  if(this.pageSetup == null){
   this.getPageSetup();
  }
  Dispatch.put(pageSetup, "Orientation", orientation);
  Dispatch.put(pageSetup, "LeftMargin", leftMargin);
  Dispatch.put(pageSetup, "RightMargin", rightMargin);
  Dispatch.put(pageSetup, "TopMargin", topMargin);
  Dispatch.put(pageSetup, "BottomMargin", buttomMargin);
 }

 /**
  * 打开文件
  *
  * @param inputDoc
  *            要打开的文件,全路径
  * @return Dispatch
  *            打开的文件
  */
 public Dispatch openDocument(String inputDoc) {

  //logger.debug("打开Word文档...");
  this.document = Dispatch.call(documents,"Open",inputDoc).toDispatch();
  this.getSelection();
  this.getRange();
  this.getAlignment();
  this.getFont();
  this.getPageSetup();
  return this.document;
 }

 /**
  * 创建新的文件
  *
  * @return Dispache 返回新建文件
  */
 public Dispatch createNewDocument(){
  
  //logger.debug("创建新的文件...");
  this.document = Dispatch.call(documents,"Add").toDispatch();
  this.getSelection();
  this.getRange();
  this.getPageSetup();
  this.getAlignment();
  this.getFont();
  return this.document;
 }

 /**
  * 选定内容
  * @return Dispatch 选定的范围或插入点
  */
 public Dispatch getSelection() {

  //logger.debug("获取选定范围的插入点...");
  this.selection = word.getProperty("Selection").toDispatch();
  return this.selection;
 }

 /**
  * 获取当前Document内可以修改的部分<p><br>
  * 前提条件:选定内容必须存在
  *
  * @param selectedContent 选定区域
  * @return 可修改的对象
  */
 public Dispatch getRange() {

  //logger.debug("获取当前Document内可以修改的部分...");
  this.range = Dispatch.get(this.selection, "Range").toDispatch();
  return this.range;
 }

 /**
  * 获得当前文档的文档页面属性
  */
 public Dispatch getPageSetup() {
  
  //logger.debug("获得当前文档的文档页面属性...");
  if(this.document == null){
   //logger.warn("document对象为空...");
   return this.pageSetup;
  }
  this.pageSetup = Dispatch.get(this.document, "PageSetup").toDispatch();
  return this.pageSetup;
 }

 /**
  * 把选定内容或插入点向上移动
  * @param count 移动的距离
  */
 public void moveUp(int count) {

  //logger.debug("把选定内容或插入点向上移动...");
  for(int i = 0;i < count;i++) {
   Dispatch.call(this.selection,"MoveUp");
  }
 }

 /**
  * 把选定内容或插入点向下移动
  * @param count 移动的距离
  */
 public void moveDown(int count) {

  //logger.debug("把选定内容或插入点向下移动...");
  for(int i = 0;i < count;i++) {
   Dispatch.call(this.selection,"MoveDown");
  }
 }

 /**
  * 把选定内容或插入点向左移动
  * @param count 移动的距离
  */
 public void moveLeft(int count) {

  //logger.debug("把选定内容或插入点向左移动...");
  for(int i = 0;i < count;i++) {
   Dispatc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值