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 工具类