1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > java 导出word 带格式_java 导出数据为word文档(保持模板格式)

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

时间:2019-11-30 01:53:12

相关推荐

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

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

这里使用freemarker来实现:

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

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

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

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

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

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

java代码如下:

packagecom.xiao;importjava.io.UnsupportedEncodingException;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;public classMain {public static void main(String[] args) throwsUnsupportedEncodingException {

Map dataMap = new HashMap();

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

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

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

//列表数据封装

List list1 = new ArrayList();

list1.add("itema");

list1.add("itemb");

list1.add("itemc");

dataMap.put("list1", list1);

DocumentHandler mdoc= newDocumentHandler();

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

}

}

packagecom.xiao;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.OutputStreamWriter;importjava.io.UnsupportedEncodingException;importjava.io.Writer;importjava.util.Map;importfreemarker.template.Configuration;importfreemarker.template.Template;importfreemarker.template.TemplateException;public classDocumentHandler {private Configuration configuration = null;publicDocumentHandler() {

configuration= newConfiguration();

configuration.setDefaultEncoding("utf-8");

}public void createDoc(Map dataMap, String fileName) throwsUnsupportedEncodingException {//需要导出模板的包路径

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

Template t= null;try{

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

}catch(IOException e) {

e.printStackTrace();

}

File outFile= newFile(fileName);

Writer out= null;

FileOutputStream fos= null;try{

fos= newFileOutputStream(outFile);

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

out= newBufferedWriter(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下载文件

publicvoid download(HttpServletRequest request, HttpServletResponse response)throwsException {try{

File f= newFile(文件路径);

FileInputStream fin= newFileInputStream(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 版本,刚开始不是用的这一个版本,遇见了稀奇古怪的问题

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。