java生成word文档

java生成word借助于freemarjer.jar

1.建立一个word模板



2、将模板另存为word XML格式


3、然后用记事本将这个xml打开,Ctrl+f 查找word模板上填写的要生成的单词,用${ }给括起来。如下:


4、将此文件重命名为ftl文件,然后复制到eclipse中去



前面都准备完毕下面开始上代码:


import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;


import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;


public class WordTest {
private Configuration configuration = null;


public WordTest() {
configuration = new Configuration();
configuration.setDefaultEncoding("UTF-8");
}


public void createWord() {


Map<String, Object> dataMap = new HashMap<String, Object>();
getData(dataMap);
configuration.setClassForTemplateLoading(this.getClass(), "/com"); // FTL文件所存在的位置
Template t = null;
try {
t = configuration.getTemplate("text.ftl"); // 文件
} catch (IOException e) {
e.printStackTrace();

File outFile = new File("c:/TEXT.doc");// 生成文件路径及文件命名 ;
Writer out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(outFile), "UTF-8"));
} catch (Exception e1) {
e1.printStackTrace();
}


try {
t.process(dataMap, out);
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}


private void getData(Map<String, Object> dataMap) {
dataMap.put("topname", "十五");
dataMap.put("name", "张三");
dataMap.put("age", "13");
dataMap.put("sex", "男");
}


public static void main(String[] args) {
WordTest test = new WordTest();
test.createWord();
}
}

执行main方法就会在C:盘下生成了。

下面说一下list情况,其实很简单。

更改一下ftl文件,一样查找</w:tr>,在第一个后面加上<#list list as test>,在第二个后面加上</#list>,还有就是将之前的${ }里面的内容换成${test.xxx}。也就是将要循环生成的那行表格用这两个标签包起来。如下图:




上代码:

先建立一个例子实体:

public class Student {
private String name;
private String age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}

}

然后将之前WordTest 里的 getData方法更改如下:

private void getData(Map<String, Object> dataMap) {

dataMap.put("topname", "十五");
//这里建立一个list,(实际中应该是从数据库中读出数据封装到实体里,这里就创建两个来举例了)。
List<Student> l = new ArrayList<Student>();
Student s1 = new Student();
s1.setName("张三");
s1.setAge("11");
s1.setSex("男");
Student s2 = new Student();
s2.setName("李四");
s2.setAge("11");
s2.setSex("男");
l.add(s1);
l.add(s2);

Map<String,Object> map;
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
for(int i = 0; i <l.size(); i++){
map = new HashMap<String,Object>();
map.put("name", l.get(i).getName());
map.put("age", l.get(i).getAge());
map.put("sex", l.get(i).getSex());
list.add(map);
}
dataMap.put("list", list);
}

执行main方法就行了!!!

注意:生成的word跟你所建的模板的格式是相同的,一定要在建模板的时候就设置好表格内容居中、字体大小什么的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值