java 上传Excel文件 使用easyExcel读取文件内容

记录Java接口上传Excel文件,及使用阿里的easyExcel读取excel文件内容,进行内容校验的过程。文中贴出代码是精简后代码,仅供参考。

引入依赖

在pom.xml中引入easyExcel需要的依赖,具体参考官网:EasyExcel文档

上传文件及读取数据

1.接口API

 /*** 文件上传接口* @param fileUploadQuery* @return*/@CrossOrigin@PostMapping("/uploadExcelFile")ImportVO uploadExcelFile(@Valid @ModelAttribute FileUploadQuery fileUploadQuery);

参数FileUploadQuery,若未使用lombok,需手动加上get、set等方法。

import lombok.Data;@Data
public class FileUploadQuery {/**ID*/private Integer Id;/**name*/private String name;
}

注返回数据类型可根据自己需要自定义。
2.controller

/*** 文件上传接口* @param fileUploadQuery* @return*/@Overridepublic ImportVO uploadExcelFile(@Valid @ModelAttribute FileUploadQuery fileUploadQuery) {return settingService.uploadExcelFile(fileUploadQuery);}

3.service
MultipartFile 是spring的一个类型,可参考MultipartFile上传文件的几种场景
文件上传详细可参考:Spring中MultipartHttpServletRequest实现文件上传

/*** 文件上传接口* @param fileUploadQuery {参数相关信息}* @return*/public ImportVO uploadExcelFile(FileUploadQuery fileUploadQuery) {ImportVO vo = new ImportVO();List<String> context = new ArrayList<>();// 读取文件信息MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;MultipartFile file = multipartRequest.getFile("file");// 如果附件为空,则结束if (file == null || file.isEmpty()) {throw new BizException(2, "文件不允许为空!");}// 存储文件流InputStream fileName = null;try {fileName = file.getInputStream();} catch (Exception e) {log.error("uploadExcelFile Error. Error is {}",  e);}// 该监听将excel文件一行一行读入内存(必须有)ExcelListener listener = new ExcelListener();ExcelReader excelReader = EasyExcel.read(fileName, ExcelModel.class,listener).build();ReadSheet readSheet = EasyExcel.readSheet(0).build();excelReader.read(readSheet);// 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的excelReader.finish();// readList 文件中的数据,不包括表头List<ExcelModel> readList = listener.getList();// 校验上传文件,校验函数可以自定义,此处不多加描述List<String> lengthResult = checkIdLength(readList);if (lengthResult.size() > 0) {context.addAll(lengthResult);}// 如果没有报错信息,说明校验通过if (context.size() < 1) {context.add("校验成功");}vo.setContext(context);return vo;}

4.easyExcel读文件

文件模板

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;@Data
public class ExcelModel {/** ID */@ExcelProperty(value = "ID", index = 0)private Integer ID;/** 姓名 */@ExcelProperty(value = "姓名", index = 1)private String name;/** 姓名,如果index这样设置会跳过第三列 */@ExcelProperty(value = "姓名", index = 3)private String name;}

文件监听

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.ArrayList;
import java.util.List;public class ExcelListener extends AnalysisEventListener<ExcelModel> {/*** 批处理阈值,正式环境通常为2000*/private static final int BATCH_COUNT = 1000;/** ExcelModel表格列属性模板 */private List<ExcelModel> list = new ArrayList<>(BATCH_COUNT);private Logger logger = LoggerFactory.getLogger("日志");/*** 每解析到一条数据,执行一次invoke()方法* @param data* @param context*/@Overridepublic void invoke(ExcelModel data, AnalysisContext context) {logger.info("解析到一条数据:{}", JSON.toJSONString(data));list.add(data);if (list.size() >= BATCH_COUNT) {list.clear();}}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {logger.info("共有{}条Id数据存入list", list.size());}// 用于获取文件内容列表public List<ExcelModel> getList() {return list;}
}

测试

使用postman测试(body–>form-data),其中file属性的类型选择为file。
postman测试文件上传

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

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

相关文章

使用TDM-GCC(mingw)搭建EasyX图形库开发环境

首先去EasyX官网&#xff1a;EasyX Graphics Library for C 然后看这个文章只把 EasyX 拷贝进项目里&#xff0c;方便发给没有安装 EasyX 的人编译&#xff08;以 MinGW 为例&#xff09; - CodeBus 请使用TDM-GCC进行编译&#xff0c;其他mingw(GNU)编译器可能有问题。 在 …

SpringBoot项目使用EasyExcel读取上传Excel

SpringBoot项目使用EasyExcel读取上传Excel 1、EasyExcel简介 EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。 EasyExcel读取Excel的解析原理: 2、导入相应的依赖文件 <dependency><groupId>com.a…

EasyV数据可视化|精选2022多行业可视化作品合集,看这篇就够了

​​时光荏苒 2022进度条■■■■■■■■□□ 80% 又是一年金秋时节&#xff0c;又是一年硕果累累&#xff0c;在这丰收的时节里&#xff0c;工作也陆续到了冲刺的阶段&#xff0c;准备开干的你&#xff0c;是否有这些疑惑 想要的效果构思不出来&#xff0c;需要点小灵感&am…

英文Essay各部分的写作攻略

以下是英文Essay各部分的写作攻略&#xff1a; 引言部分&#xff1a;在引言中&#xff0c;应该清晰明了地陈述你的主题和目的&#xff0c;以及你将要探讨的问题和论点。你可以使用一个有趣的事实、例子、名言、问题或者比喻来引起读者的兴趣。同时&#xff0c;你也可以在引言中…

从头到尾写SQL(二)

二 数据表的创建和管理 数据库是我们用的别人的。。数据表就该我们自己创建了吧。。 1.数据基本类型 建表的时候&#xff0c;需要我们确定好这个表有多少字段&#xff0c;这些字段又都是什么类型的(其实创建完以后这些东西也能改)。那么数据库接纳的数据类型有哪些呢&#…

暑假用chatgpt肝了一篇顶会...

小时候特别羡慕大雄&#xff0c;因为他有可以帮他写作业的机器猫小叮当。 熬夜读论文&#xff0c;却无法得出一个好的idea&#xff0c;深夜薅头发苦恼的时候&#xff0c;就会想如果有一个机器人&#xff0c;给出一串指令就能马上生成一篇质量上佳的论文就好了。 现在&#xff0…

Unity Open Day 北京站-技术专场:生成式AI技术助力Unity创作

【获取 2023 Unity Open Day 北京站演讲 PPT】 伴随Unity中国版引擎的布局以及AI技术的爆发式发展&#xff0c;ChatGPT、StableDiffusion等生成式AI技术受到广大Unity创作者的关注。Unity已经在AI领域探索多年&#xff0c;一直致力于利用人工智能技术以及工具&#xff0c;帮助创…

3D引擎龙头Unity:元宇宙和AI活跃玩家

Unity是用于创建和操作交互式实时3D内容的世界领先平台。凭借灵活的编辑器、友好的开发环境、丰富的工具套件&#xff0c;Unity吸引了大量开发者&#xff0c;全球排名前1000的移动游戏70%以上使用了Unity的创作和运营解决方案&#xff0c;如今&#xff0c;Unity引擎在工业场景、…

城市的 “数字生命” 是怎么被赋予的?|场景创新公司是这样开会的

ChatGPT 为我们带来了巨大便利的同时&#xff0c;也让更多人茫然、焦虑甚至恐惧。对于这一重塑我们生活的技术&#xff0c;每个渺小的个体或许都在心里有过类似的疑问&#xff1a;我&#xff0c;还能做什么&#xff1f; 当体力劳动、内容生产都能够以技术的方式进行翻天覆地的变…

关于ChatGPT应用于软件测试中的思考

前言 关于最近大火的ChatGPT相信各位也听过不同渠道听说过他的厉害&#xff0c;目前发展趋势比较火热&#xff0c;科技公司都有在考虑怎么使用ChatGPT进行提高研发效率以及办公效率&#xff0c;最近我所在的公司也有在要求大家使用ChatGPT进行改善工作效率&#xff0c;所以引发…

借助 AI 我为 Raycast 制作了一个可以 OCR 中文的插件

本文速通&#xff1a;最近用了 Raycast&#xff0c;真的很棒&#xff01;但是没有好用的中文 OCR 插件&#xff0c;不怎么会写 Typescript 的我&#xff0c;在 ChatGPT 的指导下&#xff0c;整了一个小插件。开发过程非常不严肃&#xff0c;充满了野路子&#xff0c;不敢妄称指…

ChatGPT令人触目惊心的地方

前两天&#xff0c;马斯克联合数千名AI科技人员&#xff0c;要求暂停巨型AI实验的新闻&#xff0c;想必大家都知道了。 这个消息挺爆炸&#xff0c;一度加剧了人们的恐慌情绪。 鸣哥当时灵光一闪&#xff0c;这件事ChatGPT是如何看待的&#xff1f; 于是我输入这一新闻事件&a…

卷积神经网络与循环神经网络实战 --- 手写数字识别及诗词创作

卷积神经网络与循环神经网络实战 — 手写数字识别及诗词创作 文章目录 卷积神经网络与循环神经网络实战 --- 手写数字识别及诗词创作一、神经网络相关知识1. 深度学习2. 人工神经网络回顾3. 卷积神经网络&#xff08;CNN&#xff09;3.1 卷积层3.2 汇集&#xff08;池化&#x…

chatgpt赋能python:如何在Python中中断程序并退出程序

如何在Python中中断程序并退出程序 在Python编程的过程中&#xff0c;有时候我们需要中断程序的执行&#xff0c;并让程序退出。这在调试程序时尤为重要。本文将介绍Python中如何中断程序并退出程序。 使用sys.exit()函数 在Python中&#xff0c;我们可以使用sys.exit()函数…

常见快捷令与指令

快捷指令 ctrlc:复制 ctrlv:粘贴 ctrla:全选 ctrlx:剪切 ctrlz:撤销 ctrls:保存 altF4:关闭窗口 打开cmd的方式 开始Windows系统找到命令提示符 win键R 输入cmd打开控制台&#xff08;推荐使用&#xff09; 管理员身份运行&#xff1a;右键选择以管理员方式运行即可 …

linux基本功系列之chattr命令

文章目录 一. chattr命令介绍二. 语法格式及常用选项三. 参考案例3.1 给指定文件添加隐藏属性&#xff0c;阻止文件被修改&#xff1a;3.2 撤销i属性3.3 允许补充&#xff08;追加&#xff09;内容&#xff0c;无法覆盖/删除内容 总结 前言&#x1f680;&#x1f680;&#x1f…

外箱标签是怎么制作的

外箱标签设计都较为复杂&#xff0c;无论条码类型还是数据都比较多&#xff0c;且在出库时每个标签上的条码、数字一般都是流水变化的。外箱标签一般包含了供应商、收货人、产品编码、生产日期、发货日期等信息。下面我们就看看这样的外箱标签是如何制作的。 启动条码标签软件&…

5分钟包你搞懂箱形图分析!

最近有很多用户说到了年终需要回顾这一年的工作&#xff0c;根据这一年的数据看看有没有异常的情况&#xff0c;那么哪种图能够清晰直观地展现出这一信息呢&#xff1f; 答案只有一个&#xff0c;那就是... 箱形图 箱形图&#xff08;英文&#xff1a;Box plot&#xff09;&…

Python绘制箱型图-boxplot()

boxplot(&#xff09;语法格式如下&#xff1a; boxplot(x,notchnone,symnone,vertnone,whisnone,positionsnone,widthsnone,patch_artistnone,meanlinenone,showcapsnone,showboxnone,showfliersnone,boxpropsnone,) x:表示箱型图的数据。 sym:表示异常值对应的符号&#x…

【java基础】包装类,自动装箱和自动拆箱

文章目录 基本介绍包装类自动装箱自动拆箱包装类注意事项包装类比较包装器内容不可变 基本介绍 有时&#xff0c;需要将int这样的基本类型转换为对象。所有的基本类型都有一个与之对应的类。 例如&#xff0c;Integer类对应基本类型int。通常&#xff0c;这些类称为包装器&…