java word jacob_java 使用jacob 操作word

/**

* 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

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

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值