展开全部

先下载jacob_1.10.1.zip。

解压后将jacob.dll放到windows/system32下面或\j2sdk\bin下面。

将jacob.jar加入项目。

/*

* Java2word.java

*

* Created on 2007年8月13日, 上午10:32

*

* To

change this template, choose Tools | Template Manager

* and open the template

in the editor.

*/

/*

* 传入数据为HashMap对象,32313133353236313431303231363533e78988e69d8331333337396261对象中的Key代表word模板中要替换的字段,Value代表用来替换的值。

*

word模板中所有要替换的字段(即HashMap中的Key)以特殊字符开头和结尾,如:$code$、$date$……,

以免执行错误的替换。

*

所有要替换为图片的字段,Key中需包含image或者Value为图片的全路径(目前只判断文件后缀名为:.bmp、

.jpg、.gif)。

*

要替换表格中的数据时,HashMap中的Key格式为“table$R@N”,其中:R代表从表格的第R行开始替换,N代表

word模板中的第N张表格;Value为ArrayList对象,ArrayList中包含的对象统一为String[],一条String[]代

表一行数据,ArrayList中第一条记录为特殊记录,记录的是表格中要替换的列号,如:要替换第一列、第三列、

第五列的数据,则第一条记录为String[3]

{“1”,”3”,”5”}。

*/

package com.word.util;

/**

*

* @author kdl

*/

import java.util.ArrayList;

import

java.util.HashMap;

import java.util.Iterator;

import com.jacob.activeX.ActiveXComponent;

import

com.jacob.com.Dispatch;

import com.jacob.com.Variant;

public class Java2word {

private boolean saveOnExit;

/**

* word文档

*/

Dispatch doc = null;

/**

* word运行程序对象s

*/

private ActiveXComponent

word;

/**

* 所有word文档

*/

private Dispatch

documents;

/**

* 构造函数

*/

public Java2word() {

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

//移动到文件开头

moveStart(selection);

if(oldText.startsWith("table") ||

replaceObj instanceof ArrayList)

replaceTable(selection,oldText,(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){

while(find(selection,oldText)) {

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.call(Dispatch.get(selection,"InLineShapes").toDispatch(),"AddPicture",imagePath);

}

/**

* 替换表格

* @param selection Dispatch

插入点

* @param tableName String

表格名称,形如table$1@1、table$2@1...table$R@N,R代表从表格中的第N行开始填充,N代表word文件中的第N张表

* @param fields HashMap 表格中要替换的字段与数据的对应表

*/

public void

replaceTable(Dispatch selection,String tableName,ArrayList dataList)

{

if(dataList.size() <= 1) {

System.out.println("Empty table!");

return;

}

//要填充的列

String[] cols = (String[])

dataList.get(0);

//表格序号

String tbIndex =

tableName.substring(tableName.lastIndexOf("@") + 1);

//从第几行开始填充

int fromRow =

Integer.parseInt(tableName.substring(tableName.lastIndexOf("$") +

1,tableName.lastIndexOf("@")));

//所有表格

Dispatch tables =

Dispatch.get(doc,"Tables").toDispatch();

//要填充的表格

Dispatch table = Dispatch.call(tables,"Item",new

Variant(tbIndex)).toDispatch();

//表格的所有行

Dispatch rows =

Dispatch.get(table,"Rows").toDispatch();

//填充表格

for(int

i = 1;i < dataList.size();i ++) {

//某一行数据

String[] datas = (String[]) dataList.get(i);

//在表格中添加一行

if(Dispatch.get(rows,"Count").getInt() < fromRow +

i - 1)

Dispatch.call(rows,"Add");

//填充该行的相关列

for(int j = 0;j < datas.length;j ++)

{

//得到单元格

Dispatch cell =

Dispatch.call(table,"Cell",Integer.toString(fromRow + i -

1),cols[j]).toDispatch();

//选中单元格

Dispatch.call(cell,"Select");

//设置格式

Dispatch font = Dispatch.get(selection,"Font").toDispatch();

Dispatch.put(font,"Bold","0");

Dispatch.put(font,"Italic","0");

//输入数据

Dispatch.put(selection,"Text",datas[j]);

}

}

}

/**

* 保存文件

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

}

}

本回答由电脑网络分类达人 李孝忠推荐

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

java根据word模板导出_java如何根据word模板生成word文档相关推荐

  1. java pdf在线阅读插件_JAVA实现在线查看PDF和office文档

    一个项目中要做一个在线预览附件(和百度文库差不多)的小功能点,楼主在开发过程中踩了很多坑的同时也总结了一些方法,仅供广大猿友参考,那么要实现这个小功能,目前主要是有如下3种可行的实现方式,下面先说实现 ...

  2. java下载文件到服务器_java代码实现上传文件到文档服务器、下载文档服务器文件...

    需要完成下载->修改->上传这三个步骤 平台有提供对应的api吗? /** 首先我们来理解下关于文档的api 文档相关api都在这2个package下面 package :com.just ...

  3. java 上传文件服务_java代码实现上传文件到文档服务器、下载文档服务器文件

    需要完成下载->修改->上传这三个步骤 平台有提供对应的api吗? /** 首先我们来理解下关于文档的api 文档相关api都在这2个package下面 package :com.just ...

  4. java使用EasyExcel实现导入导出几种方式(导入、模板导出、和不需要模板的导出)

    java通过EasyExcel实现导入导出(导入.模板导出.和不需要模板的导出) 此文章只是涉及到简单的导入导出 通过实体模板导入数据 无实体模板导入数据 导出数据 通过模板导出数据 使用到的mave ...

  5. Java生成PDF文档 iText使用PDF模板一

    最近在弄这个java生成pdf,哎,在网上查找了各种各样的学习资料,弄了几天,今天终于把这个效果简单的弄出来,所以,也把这个,我所走过的坑,作一个记录,提供接下来需要学习的人. 参考文献文档:http ...

  6. java pdf 首行缩进_java使用iText生成pdf文档的对齐方式

    一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或 ...

  7. PowerDesigner创建导出模版,并生成数据库文档(word文档)

    一.创建导出模版 1.Report下点击Report Templates... 2.点击新建 3.配置模版:模版名,简体中文,物理模型 4.配置模版显示项 Available items -- Lis ...

  8. xwpfdocument 保存修改_java使用POI操作XWPFDocument 生成Word实战(一)【比较详细的】...

    注:我使用的word 2016 功能简介: (1)使用jsoup解析html得到我用来生成word的文本(这个你们可以忽略) (2)生成word.设置页边距.设置页脚(页码),设置页码(文本) 一.解 ...

  9. xwpfdocument 保存修改_java使用POI操作XWPFDocument 生成Word实战(一)

    注:我使用的word 2016 功能简介: (1)使用jsoup解析html得到我用来生成word的文本(这个你们可以忽略) (2)生成word.设置页边距.设置页脚(页码),设置页码(文本) 一.解 ...

  10. java apidoc案例_java 自动生成api 文档 :apidoc

    官网:apidocjs 首先声明下,apidoc是基于注释来生成文档的,它不基于任何框架,而且支持大多数编程语言,适用于java项目.跟已有的项目框架没有任何关系 一.apidoc简介 apidoc通 ...

最新文章

  1. CASE_02 基于FPGA的数字钟万年历
  2. 【分享】通过手游赚¥
  3. matplotlib 对称图_Python入门向:Matplotlib自救指南篇,从此做图不求人(一)
  4. 遇到Io阻塞时会切换任务之【爬虫版】
  5. 设备参数—支持网络外部的通信
  6. java运行方法_java程序怎么运行?java程序运行方法
  7. 雅虎助手是如何自杀式攻击360安全卫士的?雅虎助手,3721是什么恶心人的--(部份转贴)...
  8. 记一次“香山杯”得WP
  9. java猜拳_java实现猜拳小游戏
  10. 名词解释微型计算机,微机原理名词解释
  11. php 加密网页,PHP_解密七种html网页加密解密法,自己辛苦做出来的内容被别人 - phpStudy...
  12. PHP 项目 该网页无法正常运作情况,但没有报错
  13. android 微信摇一摇功能实现,android 类似微信的摇一摇功能实现思路及代码
  14. 微分,梯度及梯度下降法
  15. 【算法】最直接的算法——穷举法详解
  16. Python+Vue计算机毕业设计宁夏葡萄酒销售系统g80g5(源码+程序+LW+部署)
  17. VS Code 这么牛,再次印证了一句名言
  18. 在做嵌入式开发的时候难免手抖,IAR软件窗口恢复操作
  19. 换了ThinkPad IBM T43
  20. 事无巨细,时钟芯片DS1302

热门文章

  1. Spring中的事务控制(Transacion Management with Spring)
  2. 小米平板4刷入twrp
  3. 你又知不知道,日有所思,夜有所梦。
  4. 华为路由器联动_华为a1路由器怎么联动Yeelight智能设备
  5. The server time zone value ‘乱码‘ is unrecognized or represents more than one time zone.
  6. MYSQL中概念模型的基本概念_数据库基本概念
  7. [转]我的IT学习生活(搜藏)
  8. 用计算机绘制函数图像ppt,ppt中怎么绘制三角函数图像?
  9. java mysql 订单表设计
  10. 网络负载均衡优化RPS实现简介