使用freemarker测试生成word文档
导入jar包
freemarker使用需要导入jar包
编辑word模板
简单示例:
word模板另存为.xml
修改后缀名为.ftl
本人使用eclipse打开ftl文件,文件格式直观些,需设置使用jsp格式打开ftl文件,百度即可
找到需要循环的表格内容,加上
<#list userList as list></#list>
单元格的内容修改为设置的对应的 对象.属性
java代码
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import freemarker.core.ParseException;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class FreemarkerTest {
private Configuration configuration = null;
public FreemarkerTest() {
configuration = new Configuration();
configuration.setDefaultEncoding("UTF-8");
}
public void createWord() throws ParseException, IOException{
Map<String, Object> dataMap = new HashMap<>();
getData(dataMap);
//configuration.setClassForTemplateLoading(this.getClass(), "C:\\Users\\Admin\\Desktop");//模板文件所在路径
configuration.setDirectoryForTemplateLoading(new File("C:\\Users\\Admin\\Desktop\\freemarker"));
Template t=null;
try {
t = configuration.getTemplate("word.ftl","utf-8"); //获取模板文件
} catch (IOException e) {
e.printStackTrace();
}
File outFile = new File("C:\\Users\\Admin\\Desktop\\freemarker\\outFile.doc"); //导出文件
Writer out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));
} catch (FileNotFoundException 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) throws ParseException {
//操作人
dataMap.put("userName", "张三");
//日期
dataMap.put("createTime", new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(new Date()));
List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();
for(int i=0;i<10;i++){
Map<String, Object> map=new HashMap<String, Object>();
map.put("name", "张三"+i);
map.put("age", (i*2));
map.put("phone","1122334455");
list.add(map);
}
dataMap.put("userList", list);
}
public static void main(String[] args) throws ParseException, IOException {
FreemarkerTest test = new FreemarkerTest();
test.createWord();
}
}
在遇到导出word需求时,曾看过一篇类似的文章,自己闲来无事,做个类似的demo,希望下次遇到直接拿过来使用