SSM 框架(未分离)按Word、Excel模板格式导出

SSM 框架按Word、Excel模板格式导出


前言

SSM 框架按Word、Excel模板格式导出

首先将所需要生成的模板在文档中打开另存为 2003 XML 格式 xml文件,在将文件后缀修改成 (.ftl)格式,放入项目中如图:
在这里插入图片描述

可以先将文档需要自动填充的位置先填充文字,数字,字母等便于后续填值精确位置
(本次文件名命名为 wgpjtj.ftl,serviceImpl方法中有填写,填写的文件名需和代码中的模板名一致)


提示:本文SSM框架未分离前后端方法实现都有原文提供实例

一、前端部分(js,layui)

1.前端按钮+方法调用

<div class="rs-btn-right">
	<button id="Export">导出Word</button>
</div>
//js部分
$("#Export").click(function () {
    //(*)自己的业务方法调用路径
    window.location.href ='*/MaintenanceEvaluationReport/createReporNewWord.do'
});

二、后端代码部分(java)

1.Controller 层

/**
     * 运维评价导出Word
     * @return
     */
    @RequestMapping("/createReporNewWord")
    @ResponseBody
    public ResponseEntity<byte[]> createReporNewWord(RfgcMaintenanceEvaluationReport model){
        File excelFile = null;
        //业务层方法: 获得需要渲染的数据
        excelFile = getRfgcMaintenanceevaluationreportService().getExportWord(model);
        if(excelFile == null){
            return null;
        }
        ResponseEntity<byte[]> result = null;
        try {
            HttpHeaders headers = new HttpHeaders();
            String agent = (String)getRequest().getHeader("USER-AGENT");
            if(agent != null && agent.toLowerCase().indexOf("firefox") > 0){
                headers.setContentDispositionFormData("fileName", "=?UTF-8?B?" + (new String(Base64.encodeBase64(excelFile.getName().getBytes("UTF-8")))) + "?=");
            }else{
                headers.setContentDispositionFormData("fileName", URLEncoder.encode(  excelFile.getName(),".doc","UTF-8"));
            }
            headers.setContentType(MediaType.MULTIPART_FORM_DATA);
            result = new ResponseEntity<byte[]>(FileUtil.readAsByteArray(excelFile), headers, HttpStatus.OK);

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //删除文件
            File finalExcelFile = excelFile;
            new Thread(() -> {
                try {
                    Thread.sleep(30000);
                    if (finalExcelFile.exists()){
                        finalExcelFile.delete();
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }).start();
        }
        return result;
    }

2.Service 层

	/**
     * [运维评价报告导出]
     * @Description //TODO 运维评价报告导出
     * @Author HUANG_KAI_WEI
     * @Date  2022/7/18 15:50
     * @param model:实体类参数
     * @return java.io.File
     **/
	 File getExportWord(RfgcMaintenanceEvaluationReport model);

3.ServiceImpl 层

	/**
     * [导出]
     **/
    @Override
    public File getExportWord(RfgcMaintenanceEvaluationReport model) {
        //业务查询获得模板表格所需要的数据 封装 map 中 在模板.ftl文件中获取值
        List<Object> report = 获取数据;
        if("1".equals(model.getRfmeType())){
            map.put("report","月度");
        }else if("2".equals(model.getRfmeType())){
            map.put("report","季度");
        }else if("3".equals(model.getRfmeType())){
            map.put("report","半年度");
        }else {
            map.put("report","年度");
        }

        map.put("reportTitle",title);
        map.put("report",report);
        try {
        	//WordUtil 工具类 放最后面
            String filePath = WordUtil()
                    .setDataModel(map)
                        .setTemplate("wgpjtj.ftl")
                    .export("运维评价"+map.get("report")+"报告","doc");
            return filePath == null ? null : new File(filePath);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

3. 在文件模板获取值方式

//集合循环
  <#list data.report as report>
  </#list>
//if判断  report_index:取集合 report 的下标
  <#if report_index!=14>
  //不需要 else 删掉即可
  <#else >
  </#if>
 //取值
  ${report.userName!""}

三、WordUtil 工具类

下载地址: WordUtil 工具类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

湫止

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值