java 导出数据为word文档(保持模板格式)

java

导出数据到具体的word文档里面,word有一定的格式,需要保持不变

 

这里使用freemarker来实现:

①:设计好word文档格式,需要用数据填充的地方用便于识别的长字符串替换  如  aaaaaaaaaaaaaaaa

②:将word文档另存为 2003 xml格式

③:找到需要替换的地方, 如 将 aaaaaaaaaaaa 修改为 ${userName}

      如果是list展示,注意按照如下方式修改:

       

<#list list1 as list1Item>

XXXXXXXXXXXXXXXXXX 原有格式代码 如一行数据或者一个单元格

</#list>

④:替换完成后,将xml文件后缀修改为ftl

 

java代码如下:

package com.xiao;

import java.io.UnsupportedEncodingException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

public class Main {

public static void main(String[] args) throws UnsupportedEncodingException {

Map<String, Object> dataMap = new HashMap<String, Object>();

dataMap.put("name", "肖昌伟");

dataMap.put("depart", "云平台");

dataMap.put("date", "2016年");


    //列表数据封装

List<String> list1 = new ArrayList<String>();

list1.add("itema");

list1.add("itemb");

list1.add("itemc");

dataMap.put("list1", list1);

DocumentHandler mdoc = new DocumentHandler();

mdoc.createDoc(dataMap, "E:/outFile2.doc");

}

}

 

 

package com.xiao;

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.UnsupportedEncodingException;

import java.io.Writer;

import java.util.Map;

import freemarker.template.Configuration;

import freemarker.template.Template;

import freemarker.template.TemplateException;

public class DocumentHandler {

private Configuration configuration = null;

public DocumentHandler() {

configuration = new Configuration();

configuration.setDefaultEncoding("utf-8");

}

public void createDoc(Map<String, Object> dataMap, String fileName) throws UnsupportedEncodingException {

//需要导出模板的包路径

configuration.setClassForTemplateLoading(this.getClass(), "/com/xiao");

Template t = null;

try {

t = configuration.getTemplate("template.ftl");

} catch (IOException e) {

e.printStackTrace();

}

File outFile = new File(fileName);

Writer out = null;

FileOutputStream fos = null;

try {

fos = new FileOutputStream(outFile);

OutputStreamWriter oWriter = new OutputStreamWriter(fos, "UTF-8");

out = new BufferedWriter(oWriter);

} catch (FileNotFoundException e1) {

e1.printStackTrace();

}

try {

t.process(dataMap, out);

out.close();

fos.close();

} catch (TemplateException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

System.out.println("文档导出完成");

}

}

 

 

这样就可以看到填充好了数据的word文档,格式和模板设置的保持一致。

 

 

 

ps:

如果是web项目,需要点击下载后弹出另存为或者保存提示框,则请按照下面代码修改,通过reponse将生成的文件以流形式保存到用户指定的位置:

通过web下载文件

public void download(HttpServletRequest request, HttpServletResponse response)

throws Exception {

try {

File f = new File(文件路径);

FileInputStream fin = new FileInputStream(f);

response.reset();//设置为没有缓存

response.setContentType("application/x-download;charset=GBK");

response.setHeader("Content-Disposition", "attachment;filename="+ Util.getGBK_ISO(ft.getFilename()));

/*attachment是以附件下载的形式,inline是以线上浏览的形式。当点击“保存”的时候都可以下载,当点击“打开”的时候attachment是在本地机里打开,inline是在浏览器里打开。*/

OutputStream output = response.getOutputStream();

byte[] buf = new byte[1024];

int r = 0;

while ((r = fin.read(buf, 0, buf.length)) != -1) {

output.write(buf, 0, r);

}

response.getOutputStream().flush();

response.getOutputStream().close();

} catch (Exception e) {

}

}

 

建议采用 freemarker-2.3.13.jar 版本,刚开始不是用的这一个版本,遇见了稀奇古怪的问题

以上是 java 导出数据为word文档(保持模板格式) 的全部内容, 来源链接: utcz.com/z/390256.html

回到顶部