【源码】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文档中心参考。原创不易喝水莫忘挖井人谢谢

相关新闻

坐地铁、排队的间隙,用这款书籍浓缩听读软件把时间变成知识

坐地铁、排队的间隙,用这款书籍浓缩听读软件把时间变成知识

通勤地铁、排队等候、午休间隙,这些碎片时间构成了当代人难以利用的时间黑洞。行业调研显示,职场人日均碎片化时间约2.4小时,但传统阅读需要在固定时段专注投入,两者形成了难以调和的矛盾。有声书软件推荐开始成为破解这一困局的关…

2026/10/21 2:03:15 阅读更多 →
Cindy高级应用:多Agent协作完成复杂任务的创新方法

Cindy高级应用:多Agent协作完成复杂任务的创新方法

Cindy高级应用:多Agent协作完成复杂任务的创新方法 【免费下载链接】cindy Consider it done. The open-source AI agent that works out of the box 想到,就能做到。开源、开箱即用的 AI Agent。 项目地址: https://gitcode.com/gh_mirrors/cind/cin…

2026/10/28 14:27:49 阅读更多 →
AG Kit内存管理技巧:持久化上下文与高效数据存储最佳实践

AG Kit内存管理技巧:持久化上下文与高效数据存储最佳实践

AG Kit内存管理技巧:持久化上下文与高效数据存储最佳实践 【免费下载链接】ag-kit 项目地址: https://gitcode.com/GitHub_Trending/an/ag-kit AG Kit是一款模块化AI代理工具包(Modular AI Agent Toolkit),专为Google Ant…

2026/11/3 20:31:59 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/6 15:21:35 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/6 9:29:27 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/5 12:28:01 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/5 12:28:02 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/6 8:08:42 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/5 19:38:59 阅读更多 →

日新闻

周新闻

月新闻