EasyExcel文件导入与导出

1.文件导入

  • 导入校验
public class BoyListener extends AnalysisEventListener {List<String> names = new ArrayList<>();/*** 每解析一行,回调该方法**/@Overridepublic void invoke(Object data, AnalysisContext analysisContext) {//校验名称String name = ((Boy) data).getName();if (StringUtils.isBlank(name)){throw new ServiceException(1,"名称不能为空");}if (names.contains(name)){throw new ServiceException(1,"名称已存在");}else {names.add(name);}}/*** 解析异常回调该方法* @param exception* @param context* @throws Exception*/@Overridepublic void onException(Exception exception, AnalysisContext context) throws Exception {if (exception instanceof ExcelDataConvertException){//从0开始ExcelDataConvertException ex= (ExcelDataConvertException) exception;//获取行号int rowIndex = ex.getRowIndex() + 1;//获取列号int colIndex = ex.getColumnIndex() + 1;throw new ServiceException(1,"第"+rowIndex+"行,第"+colIndex+"列数据格式错误");} else if (exception instanceof RuntimeException) {throw exception;}else {super.onException(exception, context);}}/*** 解析完回调该方法* @param analysisContext*/@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {names.clear();}
}
  • 导入代码
    @PostMapping("/in")public void importIn(MultipartFile file) {try {InputStream fileInputStream = file.getInputStream();List<Boy> sheet1 = EasyExcel.read(fileInputStream).registerReadListener(new BoyListener())//导入的实体类型.head(Boy.class).sheet("Sheet1")//跳过第一行,头行.headRowNumber(1).doReadSync();if (!CollectionUtils.isEmpty(sheet1)){for (Boy boy : sheet1) {System.out.println(JSON.toJSONString(boy));}}} catch (IOException e) {throw new RuntimeException(e);}}

2.导出

  • 包括导出到本地、响应、文件服务器以及多个sheet导出。
    @PostMapping("/out")public void exportOut(HttpServletResponse response) {try {ServletOutputStream outputStream = response.getOutputStream();this.setExcelResponse(response,"测试导出");//创建一个list用于存放30个Boy对象-适用于单个sheet
//            List<Boy> boyList = new java.util.ArrayList<>();
//            for (int i = 0; i < 30; i++) {
//                Boy boy = new Boy();
//                boy.setId(i);
//                boy.setName("张三" + i);
//                boy.setSalary((double) (i + 1));
//                boy.setBirthday(LocalDateTime.now());
//                boyList.add(boy);
//            }//写出到服务器
//            HashMap<String, Object> paramMap = new HashMap<>();//文件上传只需将参数中的键指定(默认file),值设为文件对象即可,对于使用者来说,文件上传与普通表单提交并无区别
//            paramMap.put("Filedata", FileUtil.file(filePath));
//            String result = HttpUtil.post("http://" + url, paramMap);//写出至本地
//            EasyExcel.write("src/main/resources/export.xlsx", Boy.class)
//                            .sheet("Sheet1")
//                                    .doWrite(boyList);//写出至浏览器
//            EasyExcel.write(outputStream, Boy.class)
//                    .excelType(ExcelTypeEnum.XLSX)
//                    .sheet("Sheet1")
//                    .doWrite(boyList);//多个sheet导出ExcelWriter writer = EasyExcel.write(outputStream, Boy.class).excelType(ExcelTypeEnum.XLSX).build();try {this.setExcelResponse(response, "多个sheet导出");//分页查询数据for(int j=1;j<=5;j++){List<Boy> boyList = new ArrayList<>();for (int i = 0; i < 30; i++) {Boy boy = new Boy();boy.setId(i);boy.setName("张三" + i);boy.setSalary((double) (i + 1));boy.setBirthday(LocalDateTime.now());boyList.add(boy);}//创建新的sheet页WriteSheet sheet = EasyExcel.writerSheet("Sheet" + j).build();writer.write(boyList,sheet );}} catch (IOException e) {throw new RuntimeException(e);//释放资源}finally {writer.finish();outputStream.flush();outputStream.close();}} catch (IOException e) {throw new RuntimeException(e);}}private void setExcelResponse(HttpServletResponse response, String rawFileName) throws UnsupportedEncodingException {//设置内容类型response.setContentType("application/vnd.ms-excel");//设置编码格式response.setCharacterEncoding("utf-8");//设置导出文件名称String fileName = URLEncoder.encode(rawFileName.concat(".xlsx"), "UTF-8");//设置响应头response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName);}

参考文献:https://blog.csdn.net/m0_51963973/article/details/131054664?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-131054664-blog-142551367.235v43pc_blog_bottom_relevance_base2&spm=1001.2101.3001.4242.1&utm_relevant_index=3

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

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

相关文章

上传Gitee仓库流程图

推荐一个流程图工具 登录 | ProcessOnProcessOn是一个在线协作绘图平台&#xff0c;为用户提供强大、易用的作图工具&#xff01;支持在线创作流程图、思维导图、组织结构图、网络拓扑图、BPMN、UML图、UI界面原型设计、iOS界面原型设计等。同时依托于互联网实现了人与人之间的…

Qt中使用线程之QConcurrent

QConcurrent可以实现并发&#xff0c;好处是我们可以不用单独写一个类了&#xff0c;直接在类里面定义任务函数&#xff0c;然后使用QtConcurrent::run在单独的线程里执行一个任务 1、定义一个任务函数 2、定义1个QFutureWatcher的对象&#xff0c;使用QFutureWatcher来监测任…

用Python将Office文档(Word、Excel、PowerPoint)批量转换为PDF

在处理不同格式的Office文档&#xff08;如Word、Excel和PowerPoint&#xff09;时&#xff0c;将其转换为PDF格式是常见的需求。这种转换不仅确保了文件在不同设备和操作系统间的一致性显示&#xff0c;而且有助于保护原始内容不被轻易修改&#xff0c;非常适合于正式报告、提…

Redisson(三)应用场景及demo

一、基本的存储与查询 分布式环境下&#xff0c;为了方便多个进程之间的数据共享&#xff0c;可以使用RedissonClient的分布式集合类型&#xff0c;如List、Set、SortedSet等。 1、demo <parent><groupId>org.springframework.boot</groupId><artifact…

【主机漏洞扫描常见修复方案】:Tomcat安全(机房对外Web服务扫描)

文章目录 引言I SSL/TLS Not ImplementedTomcat 服务器 SSL 证书安装部署(JKS 格式)Tomcat 服务器 SSL 证书安装部署(PFX 格式)HTTP 自动跳转 HTTPS 的安全配置(可选)修复SSL证书版本低II 主机漏洞扫描常见修复方案Apache JServ protocol serviceSlow HTTP DEnial of Ser…

多楼层智能穿梭:转运机器人助力制造业转型升级

针对当前喷砂产品人工转运存在的劳动强度大、效率低、安全隐患多等问题&#xff0c;本方案提出设计一套高效、安全、多楼层自动转运系统&#xff0c;采用潜伏式转运机器人结合电梯与升降平台技术&#xff0c;实现平面类、立柱类及小工件类喷砂产品的自动化、智能化转运。 项目需…

Docker 与 Yocto

Yocto项目为什么需要Docker Yocto 项目并不直接依赖 Docker&#xff0c;但在某些情况下使用 Docker 可以为 Yocto 项目提供以下具体且实际的好处&#xff1a; 1. 环境一致性&#xff1a; Yocto 构建需要一个稳定且一致的开发环境。不同的 Linux 发行版可能会有不同的库版本、…

深入探索电能消耗数据:基于机器学习的分析与洞察

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Java | Leetcode Java题解之第504题七进制数

题目&#xff1a; 题解&#xff1a; class Solution {public String convertToBase7(int num) {if (num 0) {return "0";}boolean negative num < 0;num Math.abs(num);StringBuffer digits new StringBuffer();while (num > 0) {digits.append(num % 7);…

【数据结构】包装类简单认识泛型-Java

包装类 在Java中&#xff0c;由于基本类型不是继承自Object&#xff0c;为了在泛型代码中可以支持基本类型&#xff0c;Java给每个基本类型都给了一个包装类型 基本数据类型和对应的包装类 基本数据类型包装类ByteByteshortShortint Integer longLongfloatFloatdoubleDoublec…

JSON字符串转换成Map<String, Object>形式

要将给定的JSON字符串data转换成Map<String, Object>形式&#xff0c;可以使用Java中的JSON库来解析这个字符串。常用的JSON处理库有org.json、Gson&#xff08;Google提供的&#xff09;和Jackson。下面是使用这三种库的方法示例。 使用 org.json 如果选择使用org.jso…

【JS】如何识别一个变量是不是数组对象

文章目录 1. Array.isArray()语法示例 2. Object.prototype.toString.call()语法示例 3. instanceof 操作符语法示例 4. 检查 constructor属性语法示例 总结 在 JavaScript 中&#xff0c;有几种方法可以用来识别一个变量是否是数组对象。以下是一些常用的方法&#xff1a; 1. …

wordcloud 字体报错

wordcloud 字体报错 词云库报错&#xff1a;Only supported for TrueType fonts字体文件问题pillow版本的问题wordcloud版本问题&#xff08;我的最终解决方案&#xff09; 词云库报错&#xff1a;Only supported for TrueType fonts 字体文件问题 解决方法 写绝对路径 &…

springboot3.x使用@NacosValue无法获取配置信息问题解决

一、问题描述 springboot从2.x升级到3.x后&#xff0c;nacos的依赖包需要改成Spring Cloud的依赖包才能继续使用。升级好以后&#xff0c;首先&#xff0c;确定我的项目是能够连上nacos并且加载到配置信息的&#xff0c;因为数据库等信息都是从nacos加载过来&#xff0c;能够正…

【故障解决】麒麟系统2403用户帮助手册点击无反应的解决方法

往期好文&#xff1a;【系统配置】命令行修改统信UOS的grub启动延时 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于如何解决麒麟系统2403版本中用户帮助手册点击无反应问题的文章。很多使用麒麟系统的小伙伴可能遇到过点击“用户帮助手册”后没有任何响应的情况…

Elasticsearch基础操作入门

阅前准备知识 学习 Elasticsearch (简称 ES) 的查询方式&#xff0c;建议从以下几个步骤入手&#xff1a; 理解 Elasticsearch 的基础概念 首先要了解 Elasticsearch 的核心概念&#xff0c;例如&#xff1a; Index&#xff08;索引&#xff09;&#xff1a;相当于数据库中…

【Linux学习】(3)Linux的基本指令操作

前言 配置Xshell登录远程服务器Linux的基本指令——man、cp、mv、alias&which、cat&more&less、head&tail、date、cal、find、grep、zip&tar、bc、unameLinux常用热键 一、配置Xshell登录远程服务器 以前我们登录使用指令&#xff1a; ssh 用户名你的公网…

gorm.io/sharding改造:赋能单表,灵活支持多分表策略(下)

背景 分表组件改造的背景&#xff0c;我在这篇文章《gorm.io/sharding改造&#xff1a;赋能单表&#xff0c;灵活支持多分表策略&#xff08;上&#xff09;》中已经做了详细的介绍——这个组件不支持单表多个分表策略&#xff0c;为了突破这个限制做的改造。 在上一篇文章中&…

机器学习基础:算法如何让 AI 自我学习

大家好&#xff0c;我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 AI工具集1&#xff1a;大厂AI工具【共23款…

vue3+vue-baidu-map-3x 实现地图定位

文档地址&#xff1a;一个是2一个是3 https://dafrok.github.io/vue-baidu-map/#/zh/index vue-baidu-map-3x 1.首先要到百度地图开放平台上建一个账号&#xff0c;如果有百度账号可以直接登录百度地图-百万开发者首选的地图服务商,提供专属的行业解决方案 2.点击控制台&am…