java利用word模版导出word文档详细说明
我用的jar包为freemarker-2.3.15.jar
首先把代码贴了,这是主程序
package com.tiger.document;
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.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;
public class DocumentHandler {
private Configuration configuration = null;
public DocumentHandler() {
configuration = new Configuration();
configuration.setDefaultEncoding("UTF-8");
}
public void createDoc(String dir,String fileName, String savePath,String[][] sDate) {
// 要填入模本的数据文件
Map
getData(dataMap,sDate);
// 设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载,
// 这里我们的模板是放在com.havenliu.document.template包下面
Template t = null;
try {
//从什么地方加载freemarker模板文件
configuration.setDirectoryForTemplateLoading(new File(dir));
//设置对象包装器
configuration.setObjectWrapper(new DefaultObjectWrapper());
//设置异常处理器
configuration.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
//定义Template对象
t = configuration.getTemplate(fileName);
//configuration.setDirectoryForTemplateLoading(new File("E:/"));
// test.ftl为要装载的模板
} catch (IOException e) {
e.printStackTrace();
}
// 输出文档路径及名称
File outFile = new File(savePath);
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
for(int i=0;i
}
}
}
这是测试类
package com.tiger.document;
public class Main {
public static void main(String[] args) {
long start=System.currentTimeMillis();
DocumentHandler dh=new DocumentHandler();
String[][] sDate = new String[24][2];
sDate[0][0]="abcd1";
sDate[0][1]="abcd1";
sDate[1][0]="abcd2";
sDate[1][1]="abcd2";
sDate[2][0]="abcd3";
sDate[2][1]="abcd3";
sDate[3][0]="abcd4";
sDate[3][1]="abcd4";
sDate[4][0]="abcd5";
sDate[4][1]="abcd5";
sDate[5][0]="abcd6";
sDate[5][
1]="abcd6";
sDate[6][0]="abcd7";
sDate[6][1]="abcd7";
sDate[7][0]="abcd8";
sDate[7][1]="abcd8";
sDate[8][0]="abcd9";
sDate[8][1]="abcd9";
sDate[9][0]="abcd10";
sDate[9][1]="abcd10";
sDate[10][0]="abcd11";
sDate[10][1]="abcd11";
sDate[11][0]="abcd12";
sDate[11][1]="abcd12";
dh.createDoc("E:\\doc1","test.xml","E:/outFile.doc",sDate);
long end=System.currentTimeMillis();
System.out.println(end-start);
}
}
这个是需要的模版文件,当然因为不能上传附件所以只能贴出来了,这些文件的存放位置就是测试类中的第一个参数了
word模版源文件test.doc这个文档你可以另存为xml文件格式,当然你还要看一下里面的内容是否发生变化比如${abcd1}有没有被拆开,这些变量如果被拆开那就会出现解析失败的问题
${abcd1}你
${abcd2}真
${abcd3}是
${abcd4}一
${abcd5}个
${abcd6}了
${abcd7}不
${abcd8}起
${abcd9}的
${abcd10}程
${abcd11}序
${abcd12}员
test.xml这个就是另存为xml文件的内容你可以直接拷贝粘贴到xml文件中
me w:val="SimSun"/>
Pr>
2}
最后你要在存一份test.ftl文档。这个文档就是复制一份xml文档然后改下后者后缀名
此时你就可以去测试类中看一下效果了。