SpringBoot使用esayExcel根据模板导出excel

1、依赖

       <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.3</version></dependency>

2、模板

3、实体类

package com.skybird.iot.addons.productionManagement.qualityTesting.backend.jdo;import com.alibaba.excel.annotation.ExcelProperty;public class qualityTestingExcelDao {@ExcelProperty("序号")private String index;@ExcelProperty("质检类别")private String workingProcedure;@ExcelProperty("检查部位")private String inspectionPart;@ExcelProperty("检查内容")private String inspectionContent;@ExcelProperty("检查方法")private String inspectionMethod;@ExcelProperty("检查结果")private String inspectionResult;@ExcelProperty("备注")private String notes;public String getIndex() {return index;}public void setIndex(String index) {this.index = index;}public String getWorkingProcedure() {return workingProcedure;}public void setWorkingProcedure(String workingProcedure) {this.workingProcedure = workingProcedure;}public String getInspectionPart() {return inspectionPart;}public void setInspectionPart(String inspectionPart) {this.inspectionPart = inspectionPart;}public String getInspectionContent() {return inspectionContent;}public void setInspectionContent(String inspectionContent) {this.inspectionContent = inspectionContent;}public String getInspectionMethod() {return inspectionMethod;}public void setInspectionMethod(String inspectionMethod) {this.inspectionMethod = inspectionMethod;}public String getInspectionResult() {return inspectionResult;}public void setInspectionResult(String inspectionResult) {this.inspectionResult = inspectionResult;}public String getNotes() {return notes;}public void setNotes(String notes) {this.notes = notes;}@Overridepublic String toString() {return "qualityTestingExcelDao{"+ "index='"+ index+ '\''+ ", workingProcedure='"+ workingProcedure+ '\''+ ", inspectionPart='"+ inspectionPart+ '\''+ ", inspectionContent='"+ inspectionContent+ '\''+ ", inspectionMethod='"+ inspectionMethod+ '\''+ ", inspectionResult='"+ inspectionResult+ '\''+ ", notes='"+ notes+ '\''+ '}';}
}

4、接口

private static List<qualityTestingExcelDao> getList(Document dto) {List<Document> list = DocuLib.getList(dto, "qualityInspectionList");List<qualityTestingExcelDao> excelList = new ArrayList<>();// 用于记录当前质检序号int index = 0;// 用于记录当前质检类别String inspectionPart = "";for (int i = 0; i < list.size(); i++) {Document item = list.get(i);String workingProcedure = DocuLib.getStr(item, "workingProcedure");List<Document> detectionList = DocuLib.getList(item, "detectionList");if (ObjectUtils.isNotEmpty(detectionList)) {for (Document row : detectionList) {qualityTestingExcelDao dao = new qualityTestingExcelDao();String inspectionPartDb = DocuLib.getStr(row, "project");if (!inspectionPart.equals(inspectionPartDb)) {inspectionPart = inspectionPartDb;index++;}dao.setIndex(String.valueOf(index));dao.setWorkingProcedure(workingProcedure);dao.setInspectionPart(inspectionPartDb);dao.setInspectionContent(DocuLib.getStr(row, "content"));dao.setInspectionMethod(DocuLib.getStr(row, "inspectionMethods.name"));dao.setInspectionResult(DocuLib.getStr(row, "result.name"));dao.setNotes(DocuLib.getStr(row, "illustrate"));excelList.add(dao);}} else {qualityTestingExcelDao dao = new qualityTestingExcelDao();dao.setIndex(String.valueOf(index));dao.setWorkingProcedure(workingProcedure);excelList.add(dao);}}return excelList;}/*** 根据模板下载** @param response* @throws IOException*/@GetMapping("/excel")public void excel(HttpServletResponse response, @RequestParam("id") String id)throws IOException {try {Document dto = DBUtils.find(qualityTesting.collectionName, new Document("id", id));List<qualityTestingExcelDao> excelList = getList(dto);InputStream templateStream =qualityTestingWeb.class.getResourceAsStream("/templates/qualityTesting.xlsx");if (templateStream == null) {throw new FileNotFoundException("未找到模板文件");}// 生成目标文件ExcelWriter excelWriter =EasyExcel.write(response.getOutputStream()).withTemplate(templateStream).build();WriteSheet writeSheet = EasyExcel.writerSheet().build();// 每次都会重新生成新的一行,而不是使用下面的空行FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();// 替换第一种占位符Map<String, Object> map = new HashMap<>();map.put("name", DocuLib.getStr(dto, "productName"));map.put("userName", DocuLib.getStr(dto, "completeBy.name"));map.put("time", DocuLib.getStr(dto, "completeDate"));excelWriter.fill(map, writeSheet);// 第二种占位符替换,这里定义了 hisDataexcelWriter.fill(new FillWrapper("dto", excelList), fillConfig, writeSheet);excelWriter.finish();// 设置响应头response.setContentType("application/vnd.ms-excel"); // 设置文本内省response.setCharacterEncoding("utf-8"); // 设置字符编码response.setHeader("Content-disposition", "attachment;fileName=name.xlsx");// 关闭模板流templateStream.close();} catch (FileNotFoundException e) {// 处理文件未找到异常response.setStatus(HttpServletResponse.SC_NOT_FOUND);// 返回适当的错误消息response.getWriter().write("未找到模板文件");} catch (Exception e) {// 处理其他异常response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);// 返回适当的错误消息response.getWriter().write("内部服务器错误");}}

5、效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/55388.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

配置MAC地址安全

概述 MAC地址安全配置是确保网络设备和通信安全的重要措施&#xff0c;通过限制、监控和管理设备的物理地址来防止未授权访问和潜在的网络威胁。以下是对MAC地址安全的概述&#xff1a; 基本概念 定义&#xff1a;MAC地址&#xff08;Media Access Control Address&#xff09…

Jenkins整合Docker实现CICD自动化部署(若依项目)

前期准备 提前准备好jenkins环境 并且jenkins能使用docker命令&#xff0c;并且已经配置好了jdk、node、maven环境&#xff0c;我之前写了安装jenkins的博客&#xff0c;里面讲得比较详细&#xff0c;推荐用我这种方式安装 docker安装jenkins&#xff0c;并配置jdk、node和m…

CEP 复杂事件处理引擎进阶:股票中高频 CTA 策略实现与并行回测

在 CEP 复杂事件处理引擎入门&#xff1a;初级高频量价因子策略的实现 中&#xff0c;我们详细介绍了 CEP 引擎和它的一些关键概念&#xff0c;如复杂事件和事件监听器等。随后又通过两个初级的 CEP 引擎使用案例介绍了创建并运行一个最简单结构的 CEP 引擎所需的步骤和模块&am…

骨传导耳机哪个牌子最好?五大高口碑骨传导耳机揭秘!

骨传导耳机作为一种创新的音频设备&#xff0c;通过振动头骨直接将声音传递到内耳&#xff0c;不仅为用户提供了全新的听音体验&#xff0c;还能在保持环境音的情况下享受音乐&#xff0c;特别适合户外运动和日常通勤。然而&#xff0c;在众多品牌和型号中选择最适合自己的骨传…

人工智能正在扼杀云计算的可持续性

可持续性曾是公共云计算中备受推崇的优势。企业和云提供商大肆宣扬他们的绿色计划&#xff0c;推广采用可再生能源的数据中心&#xff0c;以减少碳足迹。 近几个月来&#xff0c;这个话题已悄然淡出人们的视线。罪魁祸首是什么&#xff1f;对人工智能功能的无限需求正在推动云…

为何云渲染成为3D设计的首选?效率解析

在3D设计领域&#xff0c;建模和渲染是两个不可或缺的步骤。3D建模软件如3ds Max让设计师能够创造出精美的三维模型&#xff0c;而渲染则是将这些模型转化为逼真图像或动画的过程。 渲染的重要性在于&#xff0c;它能够直观地展示设计的最终效果&#xff0c;使得设计师能够及时…

MongoDB未授权访问

mongodb未授权访问漏洞 复现 MongoDB[//]: # (忙够DB)是一种流行的开源文档数据库管理系统&#xff08;DBMS&#xff09;&#xff0c;基于分布式文件存储的数据库属于NoSQL数据库的一种。 开启MongoDB服务时不添加任何参数时,默认是没有权限验证的 登录的用户可以通过默认端口…

基于Java微信小程序的高校教务管理系统的详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…

自动化工具:Ansible

目录 一、运维自动化工具有哪些 二、Ansible 概述 1、Ansible 概念 2、Ansible 特点 3、Ansible 工作流程 三、安装部署Ansible 1、环境部署 2、管理节点安装 Ansible 3、查看Ansible相关文件 4、配置主机清单 5、免密管理 ssh-keygen 5.1、测试连通性 5.2、简洁输…

禹神TypeScript课程记录

TypeScript与JavaScript的关系 TypeScript是一个基于JavaScript的扩展语言TypeScript包含了JavaScript的所有内容TypeScript增加了&#xff1a;静态类型检查、接口、泛型等很多现代开发特性&#xff0c;更适合大型项目。TypeScript需要编译为JavaScript&#xff0c;然后才能在浏…

【优选算法篇】编织算法的流动诗篇:滑动窗口的轻盈之美

文章目录 C 滑动窗口详解&#xff1a;基础题解与思维分析前言第一章&#xff1a;热身练习1.1 长度最小的子数组解法一&#xff08;暴力求解&#xff09;解法二&#xff08;滑动窗口&#xff09;滑动窗口的核心思想图解分析滑动窗口的有效性时间复杂度分析易错点提示 1.2 无重复…

vue3基础入门以及常用api使用

setup setup 的返回值可以是函数 data(){ return { a:111, c:this.name } }, setup(){ let name 1111 return ()> 哈哈哈 }//结果页面就是会显示 哈哈哈setup和 OptionsAPI关系 data能和setup能同时存在&#xff0c;但不建议 data能读到setup里边的数据 setup是最早的生命…

Java基础06-常用API

六、常用API API &#xff1a;应用程序编程接口 1、Object 作用&#xff1a;Object类是Java中所有类的祖宗类&#xff0c;因此&#xff0c;Java中所有类的对象都可以直接使用0bject类中提供的一些方法。 方法名说明toString()返回字符串数据equals(Object o)比较两个对象地址是…

使用 Docker-compose 部署达梦 DM 数据库

目录 1. 获取达梦 DM8 Docker 镜像并上传到 Harbor 服务器 2. Docker-compose 部署达梦 DM8 数据库 3. 配置 dm.ini 文件 4.完整的 dm.ini 文件 最近&#xff0c;将 MySQL 数据库迁移到了达梦 DM8 数据库。本文将分享如何通过 Docker-compose 部署达梦 DM8 数据库的过程&am…

ARM(5)内存管理单元MMU

一、虚拟地址和物理地址 首先&#xff0c;计算机系统的内存被组成一个由M个连续的字节大小组成的数组。每字节都会有一个唯一的物理地址。CPU访问内存最简单的方式就是使用物理地址。如下图&#xff1a; 图 1 物理地址,物理寻址 而现在都是采用的都是虚拟寻址的方法。CPU生成一…

gitlab保护分支设置

版本&#xff1a;gitlab10.2.2 一旦设置master分支被保护&#xff0c;除了管理员之外的任何用户都无法直接向master提交代码&#xff0c;只要提交代码就会报错 # git push -u origin master Total 0 (delta 0), reused 0 (delta 0) remote: GitLab: You are not allowed to pu…

在CentOS系统下实现准实时SFTP上传指定目录下前2分钟的文件

在CentOS系统下实现准实时SFTP上传指定目录下前2分钟的文件 引言准备工作编写Shell脚本执行脚本定时执行脚本注意事项结论引言 在企业级的文件同步和备份场景中,经常需要将本地目录中最新生成的文件(如前2分钟内生成的文件)快速上传到远程服务器的指定目录。为了实现这一目…

unity 屏幕波动反馈打击效果(附资源下载)

unity 屏幕波动反馈打击效果 一枪打出去整个屏幕都回波动的效果反馈。 知识点&#xff1a; 1、动画事件 2、屏幕后处理 效果如图&#xff1a;&#xff08;波动速度浮动都可调整&#xff09; 附件下载

【互联网业务风控】

1. 不同场景下的业务风控 1.1 账户业务风控 1.1.1账户安全 • 账号安全是所有强账号体系应用的基础&#xff0c; 强账号体系&#xff0c;如电商、网游、第三方支付、社交网络、即时通讯等&#xff1b;是需要登录后产生数据和交互的应用&#xff0c; 弱账号体, 如搜索、导航、…

关键词提取技术:TF-IDF 和 TextRank 简介

关键词提取是自然语言处理中的重要任务之一&#xff0c;用于自动提取文档中最能代表其内容的词汇。两种常用的关键词提取技术是 TF-IDF 和 TextRank。它们的工作机制和应用场景有所不同&#xff0c;下面将详细解释这两种技术。 1. TF-IDF&#xff08;Term Frequency - Inverse…