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