您的位置:首页 > 编程语言 > Java开发

java生成word文档

2016-06-20 15:33 423 查看
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跟你所建的模板的格式是相同的,一定要在建模板的时候就设置好表格内容居中、字体大小什么的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 生成 word