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 dataMap = new HashMap();
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 dataMap,String[][] sDate) {
for(int i=0;idataMap.put(sDate[i][0],sDate[i][1]);
}
}

}
这是测试类

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文件中



eBPMeBPM202012-11-27T01:57:00Z2012-11-27T01:57:00Z1181051112214

me w:val="SimSun"/>

Pr>${abcd1}${abcd2}${abcd3}${abcd4}${abcd5}${abcd6}${abcd7}${abcd8}${abcd9}${abcd10}${abcd11}${abcd1

2}

最后你要在存一份test.ftl文档。这个文档就是复制一份xml文档然后改下后者后缀名


此时你就可以去测试类中看一下效果了。

相关主题
相关文档
最新文档