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

摘要:
单击“保存”时,可以下载它。单击“打开”时,附件将在本地计算机中打开,内联将在浏览器中打开。

导出数据到具体的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文档(保持模板格式)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇4、LayIM 开发者文档10款jquery弹出层 动画效果应有尽有下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

下载.xlsx文件 报错解决方法

下载.xlsx文件时,下载后的文件总是提示错误 错误提示: Excel在“12.xlsx”中发现不可读取内容。是否恢复工作簿的内容?如果信任此工作簿的来源,请单击“是”。 单击“是”后:Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃。 解决之后的下载代码如下: FileStream fileStream=new FileStre...

Asp.net Web.Config 配置元素customErrors

Asp.net配置文件的配置方式,其实在MSDN里面是写得最清楚的了。可惜之前一直未曾了解到MSDN的强大。 先贴个地址:http://msdn.microsoft.com/zh-cn/library/dayb112d(v=vs.80).aspx,然后逐个分析。我希望自己能够从头到尾认真学完这系列东西。为了不至于让自己太早放弃,我决定从自己用过的配置文件学...

.Net操作Excel —— NPOI

近期的两个项目都有关于NPOI的功能,经过了一点学习,自己也摸索了一会,感觉还有点意思。现在将部分代码分享一下。一部分是C#代码,一部分是VB.Net的,懒得修改了,基本上都是从项目文件中copy出来的。如果错漏,请指教。 概述: 1、整个Excel表格:WorkBook(工作薄),包含的叫页(工作表):Sheet;行:Row;单元格Cell。 2、NPO...

[转]angular 禁止缓存

本文转自:https://www.cnblogs.com/jonney-wang/p/9797906.html angular 单页面开发,会存在和管理很多HTML和JS文件,缓存有时是个麻烦。 在开发和测试阶段,F12调出调试工具,禁止缓存F5刷新下就好了。 但是在客户那里缓存就体验效果不好,甚至认为有问题,联系客服,影响工作效率。 主要做几点就可以了,...

HttpServletResponse、页面文件下载、验证码

summarize 在创建Servlet时,会覆盖service方法或doGet()/doPost(),它俩都是 HTTPServletresponse这些方法都有俩参数,一个是请求request,一个是响应response,HttpServletResponse是ServletResponset的子接口, 浏览器发出http请求,会直接传给Tomcat,...

Bing API初体验 z

Bing正式发布没几天,除了功能和搜索结果外,作为开发者来说,我们关心的还有Bing API啥时候能出。周末浏览MSDN网站时,发现Bing Service已经上线了,链接是:http://msdn.microsoft.com/en-us/library/dd900818.aspx Bing提供的API很丰富,除了搜索外,还增加了广告Ad、图片、新闻、Ph...