当前位置: 首页 > news >正文

【springboot】【easyexcel】excel文件读取

目录

    • pom.xml
    • ExcelVo
    • 逐行读取并处理
    • 全部读取并处理
    • 向ExcelListener 传参

pom.xml

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

ExcelVo

字段映射

@Data
public class ExcelVo {@ExcelProperty(value = "序号", index = 0)private Integer num;@ExcelProperty(value = "工号", index = 1)private String id;@ExcelProperty(value = "姓名", index = 2)private String username;...
}

逐行读取并处理

controller:接收文件接口

@RequestMapping(value = "/upload", method = RequestMethod.POST)
public JsonResult upload(@RequestParam("file") MultipartFile file) {if (file.isEmpty()) {return false;}try {ExcelListener excelListener = new ExcelListener();EasyExcel.read(file.getInputStream(), ExcelVo.class, excelListener).sheet().doRead();return true;}catch (Exception e){}}

ExcelListener :逐行处理

@Component
public class ExcelListener extends AnalysisEventListener<ExcelVo> {public static ExcelListener excelListener; //声明对象@PostConstruct //初始化public void init() {excelListener = this;excelListener.resultService = this.resultService;}@Autowiredprivate ResultService resultService;@Overridepublic void invoke(ExcelVo excelVo, AnalysisContext analysisContext) {excelListener.resultService.updateLevel(excelVo);}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {System.out.println("excel读取完成");}
}

全部读取并处理

controller:接收文件接口

@RequestMapping(value = "/upload", method = RequestMethod.POST)public JsonResult upload(@RequestParam("file") MultipartFile file, @RequestParam("city") String city, @RequestParam("username") String username) {if (file.isEmpty()) {throw new RuntimeException("文件上传失败");}try {ExcelListener excelListener = new ExcelListener();EasyExcel.read(file.getInputStream(), ExcelVo.class, excelListener).sheet().doRead();List<ExcelVo> list = excelListener.getList();namelistService.insertList(list, city, username);return JsonResult.ok(true);} catch (Exception e) {}}

ExcelListener :逐行存入list,再批量处理

@Component
@Data
public class ExcelListener extends AnalysisEventListener<ExcelVo> {List<ExcelVo> list = new ArrayList<>();@Overridepublic void invoke(ExcelVo excelVo, AnalysisContext analysisContext) {if (excelVo == null) {throw new RuntimeException("excel读取失败");}list.add(excelVo);}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {System.out.println("excel读取完成");}
}

向ExcelListener 传参

controller:接收文件接口

@RequestMapping(value = "/upload", method = RequestMethod.POST)public JsonResult upload(@RequestParam("file") MultipartFile file, @RequestParam("city") String city, @RequestParam("username") String username) {if (file.isEmpty()) {throw new RuntimeException("文件上传失败");}try {ExcelListener excelListener = new ExcelListener(namelistService, city, username);EasyExcel.read(file.getInputStream(), ExcelVo.class, excelListener).sheet().doRead();return true;} catch (Exception e) {}}

ExcelListener :通过构造函数重载,传入service层接口或其他参数

@Component
@Data
public class ExcelListener extends AnalysisEventListener<ExcelVo> {private NamelistService namelistService;private String city;private String username;public ExcelListener() {}public ExcelListener(NamelistService namelistService) {this.namelistService = namelistService;}public ExcelListener(NamelistService namelistService, String city, String username) {this.namelistService = namelistService;this.city = city;this.username = username;}@Overridepublic void invoke(ExcelVo excelVo, AnalysisContext analysisContext) {if (excelVo == null) {throw new RuntimeException("excel读取失败");}namelistService.insertOne(excelVo,city,username);}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {System.out.println("excel读取完成");}
}

相关文章:

【springboot】【easyexcel】excel文件读取

目录 pom.xmlExcelVo逐行读取并处理全部读取并处理向ExcelListener 传参 pom.xml <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version> </dependency>ExcelVo 字段映射…...

【STM32】ADC模数转换器

1 ADC简介 ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁 STM32是数字电路&#xff0c;只有高低电平&#xff0c;没有几V电压的概念&#xff…...

Git篇---第九篇

系列文章目录 文章目录 系列文章目录前言一、使用过git merge和git rebase吗?它们之间有什么区别?二、使用过git cherry-pick,有什么作用?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看…...

Paper Reading: (ACRST) 基于自适应类再平衡自训练的半监督目标检测

目录 简介工作重点方法CropBankFBRAFFRTwo-stage Pseudo-label Filtering 实验与SOTA比较消融实验 简介 题目&#xff1a;《Semi-Supervised Object Detection with Adaptive Class-Rebalancing Self-Training》&#xff0c;AAAI’22&#xff0c; 基于自适应类再平衡自训练的半…...

2023年贺岁电影:一眼多,二眼好多

如果从11月末开始统计&#xff0c;今年贺岁档共有72部贺岁片&#xff0c;平均一天就有2部电影上映&#xff0c;看完总计需要花费7400分钟。 这个数量几乎快赶上2021年到2022年贺岁片的总和。 今年电影市场快速回暖以来&#xff0c;多部爆款作品接力上映&#xff0c;持续刺激市…...

软件测试面试中基础与功能的问题

一、 你们的测试流程是怎么样的&#xff1f; 答&#xff1a;1.项目开始阶段&#xff0c; BA &#xff08;需求分析师&#xff09; 从用户方收集需求并将需求转化为规格说明书&#xff0c;接 下来在 项目组领导 会组织需求评审。 2.需求评审通过后&#xff0c;BA 会组织 项目…...

map|二分查找|离线查询|LeetCode:2736最大和查询

本文涉及的基础知识点 二分查找算法合集 题目 给你两个长度为 n 、下标从 0 开始的整数数组 nums1 和 nums2 &#xff0c;另给你一个下标从 1 开始的二维数组 queries &#xff0c;其中 queries[i] [xi, yi] 。 对于第 i 个查询&#xff0c;在所有满足 nums1[j] > xi 且…...

你知道Java中的BigInteger类和BigDecimal类吗?

BigInteger和BigDecimal&#xff1a; 我们在学习JavaSE基础的时候学习过int和double&#xff0c;前者是整形&#xff0c;后者是双精度浮点数&#xff0c;但它们是有最大值的&#xff0c;也就是说&#xff0c;他两并不支持无限大的数字。 其范围如下所示&#xff1a; 因此对于…...

33.搜索旋转排序数组

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;33. 搜索旋转排序数组 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 在二分查找时&#xff0c;分情况讨论即可。通过与第一个元素和最后一个元素的比较来获得 mid 处于第一个序列中还是第…...

【unity】【WebRTC】从0开始创建一个Unity远程媒体流app-设置输入设备

【项目源码】 包括本篇需要的脚本都打包在项目源码中,可以通过下面链接下载: https://download.csdn.net/download/weixin_41697242/88623091 【背景】 目前我们能投射到远端浏览器(或者任何其它Peer)的媒体流只有默认的MainCamera画面,其实我们还可以通过配置输入来传…...

Redis持久化AOF详解

基础面试题 什么是AOF AOF&#xff08;Append-Only File&#xff09;用于将Redis服务器收到的写操作追加到日志文件&#xff0c;通过该机制可以保证服务器重启后依然可以依靠日志文件恢复数据。 它的工作过程大抵分为以下几步&#xff1a; 收到客户端的写入命令(例如SET、DE…...

基于ssm网络安全宣传网站设计论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本网络安全宣传网站就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…...

机器人行业数据闭环实践:从对象存储到 JuiceFS

JuiceFS 社区聚集了来自各行各业的前沿科技用户。本次分享的案例来源于刻行&#xff0c;一家商用服务机器人领域科技企业。 商用服务机器人指的是我们日常生活中常见的清洁机器人、送餐机器人、仓库机器人等。刻行采用 JuiceFS 来弥补对象存储性能不足等问题。 值得一提的是&am…...

墒情监测FDS-400 土壤温湿电导率盐分传感器

墒情监测FDS-400 土壤温湿电导率盐分传感器产品概述 土壤温度部分是由精密铂电阻和高精度变送器两部分组成。变送器部分由电源模块、温度传感模块、变送模块、温度补偿模块及数据处理模块等组成&#xff0c;解决铂电阻因自身特点导入的测量误差&#xff0c;变送器内有零漂电路…...

QT -CloudViewer工具

QT -CloudViewer工具 一、演示效果二、关键程序三、程序下载 一、演示效果 二、关键程序 void CloudViewer::doOpen(const QStringList& filePathList) {// Open point cloud file one by onefor (int i 0; i ! filePathList.size(); i) {timeStart(); // time startmycl…...

GoLong的学习之路,进阶,微服务之使用,RPC包(包括源码分析)

今天这篇是接上上篇RPC原理之后这篇是讲如何使用go本身自带的标准库RPC。这篇篇幅会比较短。重点在于上一章对的补充。 文章目录 RPC包的概念使用RPC包服务器代码分析如何实现的&#xff1f;总结Server还提供了两个注册服务的方法 客户端代码分析如何实现的&#xff1f;如何异步…...

uniapp x 相比于其他的开发系统框架怎么样?

首先我们要知道niapp这是一种基于Vue.js开发的跨平台应用框架&#xff0c;可以将同一套代码同时运行在多个平台上&#xff0c;包括iOS、Android、H5等。相比其他开发系统框架&#xff0c;他有什么优点呢&#xff1f;让我们共同探讨一下吧&#xff01; 图片来源&#xff1a;unia…...

2024最新独立站建站教程!WordPress 搭建独立站的方法和步骤

不知道大家是否听说过 WordPress &#xff1f;最近有个国外博主分享&#xff0c;她60岁的奶奶居然用WordPress建了个关于她宠物日常的小博客&#xff0c;看来 WordPress 在国外真的是很普及。其实&#xff0c;国外很多商家还利用 WordPress 搭建自己的电商网站&#xff0c;那说…...

深入React Flow Renderer(二):构建拖动操作栏

在上一篇博客中&#xff0c;我们介绍了如何启动React Flow Renderer并创建一个基本的工作流界面。本文将进一步深入&#xff0c;着重讨论如何构建一个可拖动的操作栏&#xff0c;它是用户与工作流交互的入口之一。 引言 操作栏是工作流界面的一部分&#xff0c;通常位于界面的…...

Java项目学生管理系统六后端补充

班级管理 1 班级列表&#xff1a;后端 编写JavaBean【已有】编写Mapper【已有】编写Service编写controller 编写Service 接口 package com.czxy.service;import com.czxy.domain.Classes;import java.util.List;/*** author 桐叔* email liangtongitcast.cn* description*/ p…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构

React 实战项目&#xff1a;微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇&#xff01;在前 29 篇文章中&#xff0c;我们从 React 的基础概念逐步深入到高级技巧&#xff0c;涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...