【源码】JeecgBoot导出Excel模板

📅 2026/7/29 18:33:47
【源码】JeecgBoot导出Excel模板
【源码】JeecgBoot导出Excel模板一、前言1、Excel模板原型二、实现代码1、导入模板2、yml文件配置3、接口方法4、前端调取方法三、说明版权声明文为博主原创文章未经博主允许不得转载。原创不易希望大家尊重原创Copyright © 2026 DarLing丶张皇 保留所有权利一、前言JeecgBoot中Autopoi是其自带的实现导入导出功能的poi可以方便我们更简单的实现Excel模板导出Excel导入Word模板导出。使用前准备在Maven中引入Autopoi依赖dependencygroupIdorg.jeecgframework/groupIdartifactIdautopoi-web/artifactIdversion1.3.6/version/dependency所有表达式表达式描述/示例三目运算{{test ? obj:obj2}}test如果某一个字段则该字段一定是布尔类型,如果一个表达式如arg 1则一定要带有空格n:这个cell是数值类型 {{n:}}le:代表长度{{le:()}} 在if/else 运用{{le:() 8 ? obj1 : obj2}}fd:格式化时间 {{fd:(obj;yyyy-MM-dd)}}fn:格式化数字 {{fn:(obj;###.00)}}fe:遍历数据,创建row!fe遍历数据不创建row$fe:下移插入,把当前行,下面的行全部下移.size()行,然后插入#fe:横向遍历v_fe:横向遍历值!if:删除当前列 {{!if:(test)}}单引号表示常量值 ‘’ 比如’1’ 那么输出的就是 1NULL空格]]换行符 多行遍历导出1、Excel模板原型上图中t.name等为模板占位符预先设置导出模板通过表达式取值二、实现代码1、导入模板先将模板Word导入到jeecg-boot-module-systemsrcmainresourcestemplates下2、yml文件配置统一在.yml文件中配置文档模板目录方便维护。2.1、开发环境下在application-dev.yml中配置path :template-attendance-record-file: jeecg-boot-module-system/src/main/resources/templates/attendance_record.xlsx2.2、生产环境下在application-prod.yml中配置path :template-attendance-record-file: jeecg-boot-module-system/src/main/resources/templates/attendance_record.xlsx3、接口方法Controller// 引入模板文件存放地址Value(value${jeecg.path.template-attendance-record-file})privateStringtemplateAttendanceRecordFile;/** * 导出考勤记录表Excel(模板) * templateAttendanceRecordFile为模板存放路径请在yml文件中配置 * param startTime * param endTime */GetMapping(value/export-excel-file)publicResponseEntityResourceexportExcel(RequestParam(namestartTime,requiredtrue)StringstartTime,RequestParam(nameendTime,requiredtrue)StringendTime){Resourceresourcenull;FiletempFilenull;try{// step.1 获取数据并写入Excel调用Service层导出方法org.apache.poi.ss.usermodel.WorkbookworkbooktbClockRecordService.exportExcel(startTime,entTime,templateAttendanceRecordFile);// step.2 创建临时文件保存导出结果tempFileFile.createTempFile(exported_survey_report_sample_test_file,.xlsx);FileOutputStreamfosnewFileOutputStream(tempFile);workbook.write(fos);fos.close();workbook.close();// step.3 创建FileSystemResource对象resourcenewFileSystemResource(tempFile);// step.4 返回ResponseEntity包含文件的响应returnResponseEntity.ok().header(Content-Disposition,attachment; filenameattendance_record.xlsx).body(resource);}catch(Exceptione){e.printStackTrace();log.error(考勤信息导出失败e.getMessage());thrownewValidationException(考勤信息失败e.getMessage());}finally{// 清理临时文件可选取决于是否需要保留文件if(tempFile!nulltempFile.exists()){tempFile.deleteOnExit();}}}Service/** * 导出考勤信息Excel模板 * param startTime 开始时间 * param endTime 结束时间 * param templatePath 模板地址路径 * return */WorkbookexportExcel(StringstartTime,StringendTime,StringtemplatePath);5、ServiceImpl/** * 导出考勤记录Excel模板 * param startTime 开始时间 * param entTime 结束时间 * param templatePath 模板地址路径 * return */OverridepublicWorkbookexportExcel(StringstartTime,StringentTime,StringtemplatePath){Workbookworkbooknull;try{// Step.1、判断模板文件是否存在FiletemplateFilenewFile(templatePath);if(!templateFile.exists()){thrownewIOException(模板文件不存在:templatePath);}// Step.2、数据查询(仅为示例)ListTbClockRecordtbClockRecordListtbClockRecordService.selectList(newLambdaQueryWrapperAreaFarm().eq(TbClockRecord::getCreateTime,startTime).eq(TbClockRecord::getCreateTime,entTime));if(ObjectUtil.isNull(tbLeave)){thrownewJeecgBootException(未找到数据);}// Step.3、封装模板数据(以下仅为示例具体数据请根据自身业务赋值)ListMapString,ObjecttotalMapListnewArrayList();ListMapString,ObjectlistMapnewArrayList();// 序号从1自增intseqNum1;for(TbClockRecordtbClockRecord:tbClockRecordList){MapString,ObjectmapnewHashMapString,Object();// 序号map.put(xh,seqNum);// 姓名map.put(name,tbClockRecord.getName());// 部门map.put(dept,tbClockRecord.getDept());// 上班打卡map.put(clockin,tbClockRecord.getClockin());// 下班打卡map.put(clockout,tbClockRecord.getClockout());// 打卡说明map.put(detail,tbClockRecord.getDetail());// 备注map.put(remark,tbClockRecord.getRemark());seqNum;listMap.add(map);}totalMapList.put(maplist,listMap)// Step.4、使用Jeecg-Boot模板导出ExcelTemplateExportParamsparamsnewTemplateExportParams(templatePath);workbookExcelExportUtil.exportExcel(params,totalMapList);}catch(Exceptione){e.printStackTrace();}returnworkbook;}4、前端调取方法4.1、统一的API请求管理/** * 下载文件 用于导出 * param url 请求地址 * param parameter 请求参数 * returns {*} */exportfunctiondownFile(url,parameter){returnaxios({url:url,params:parameter,method:get,responseType:blob})}//get请求、post请求等此处省略4.2、请求// 引入API请求import{downFile}from/api;/** * 下载文件 用于Excel导出 * param record 导出数据的行信息 * returns {*} */handleExportWord(record){const{id,name}record;letparams{id};downFile(/export-excel-file,params).then((data){if(!data||data.size0){this.$message.warning(考勤记录表下载失败);return;}if(typeofwindow.navigator.msSaveBlob!undefined){// IE/Edge 浏览器window.navigator.msSaveBlob(newBlob([data],{type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet}),fileName.xlsx);}else{// 现代浏览器leturlwindow.URL.createObjectURL(newBlob([data],{type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet}));letlinkdocument.createElement(a);link.style.displaynone;link.hrefurl;link.setAttribute(download,fileName-考勤记录表.xlsx);// 统一使用 fileNamedocument.body.appendChild(link);link.click();document.body.removeChild(link);window.URL.revokeObjectURL(url);}}).finally((){this.confirmLoadingfalse;})})}三、说明预先设置导出模板通过表达式取值实现一些特殊样式/风格的导出避免编写大量复杂的代码降低开发难度提高维护效率word模板和Excel模板用法基本一致支持的标签也是一致的若需要Word模版导出请移步前往【源码】JeecgBoot导出Word模板学习。Excel模板导出前往JeecgBoot文档中心参考。原创不易喝水莫忘挖井人谢谢