使用FreeMaker将数据库内容以指定文件格式导出

使用FreeMaker将数据库内容以指定文件格式导出

1.首先你得有一个word模板,将需要填充的内容用占位符进行填充${括号里的值是后台创建map的key}

注意${}里面装的是一个list,那么list是map的key值,info对应list里面的属性,也就是你想循环打印的内容
在这里插入图片描述

2.将文件以xml的方式进行导出
在这里插入图片描述
3.然后放入idea中将文件后缀改为ftl结尾
在这里插入图片描述
4.注意ftl里面的格式有些不对需要手动调整,找到文件里面各个key的位置,可以ctrl+f快速定位
在这里插入图片描述

5.将${leader}中间多余的删除变成如下图
在这里插入图片描述

6.如果你 {}里面装的是list则需要循环删除多余的部分后,再整段的前后加上<#list 你map里Value为list的key as 这个as后面的随意相当于循环每个变量的名字> 但下面 也要改变${自己取的随意变量.属性}
在这里插入图片描述
7.开始代码编写

  //docMap装的是你数据库查出来的值
  Map docMap = new HashMap();
  docMap.put("dutyTime",dutyTime);
  docMap.put("list",maps);
  Writer out = null;
  FileInputStream in = null;
  //filePath是你文件的相对路径
  String filePath = "相对路径.doc";
   try {
            //Configuration 用于读取ftl文件
            Configuration configuration = new Configuration(new Version("2.3.8"));
            configuration.setDefaultEncoding("utf-8");
            configuration.setDirectoryForTemplateLoading(new File("你把文件放到的文件夹的路劲"));
            //以utf-8的编码读取ftl文件
            Template template = configuration.getTemplate("dutyrecord.ftl", "utf-8");
            FileUtil.createFile(filePath);
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath), "utf-8"), 10240);
            //这一步就是填充内容
            template.process(docMap, out);
            //下载文件
           downOneFile(filePath);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            IOUtils.closeQuietly(out);
        }
  public void downOneFile(String fileName) throws Exception {
        HttpServletResponse resp = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
        File file = new File("文件夹的相对路径" + fileName);
        if (file.exists()) {
            resp.setContentType("application/x-msdownload");
            resp.setHeader("Content-Disposition", "attachment;filename=" + new         String(fileName.getBytes(), "ISO-8859-1"));
            InputStream inputStream = new FileInputStream(file);
            ServletOutputStream ouputStream = resp.getOutputStream();
            byte b[] = new byte[1024];
            int n;
            while ((n = inputStream.read(b)) != -1) {
                ouputStream.write(b, 0, n);
            }
            ouputStream.close();
            inputStream.close();
        }
    }

最后的下载功能因个人而异,发现错误多多包涵。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值