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

2025 FastExcel在Java的Maven项目的导出和导入,简单易上手,以下为完整示例

注意:

        示例项目是java的springboot+mybatis-flex框架下写的,引入中会涉及到import com.mybatisflex.xxxx的依赖,根据自己的实际情况写实体类即可

1、用户表

CREATE TABLE `users` (`id` bigint(20) NOT NULL COMMENT '主键ID',`tel` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '手机号码',`name` varchar(20) DEFAULT NULL COMMENT '名字',`sex` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '性别',`province` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '省',`city` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '市'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户' ROW_FORMAT=COMPACT;

2、pom依赖【重点】

<!--   fastexcel     -->
<dependency><groupId>cn.idev.excel</groupId><artifactId>fastexcel</artifactId><version>1.3.0</version>
</dependency>

3、实体类【重点 @ExcelProperty("xxx")】

package com.jiaketao.entity;import cn.idev.excel.annotation.ExcelProperty;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;/*** 用户** @author* @since 2025-09-17*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("users")
public class Users implements Serializable {private static final long serialVersionUID = 1L;/*** 主键ID*/@Id(keyType = KeyType.Auto)private Integer id;/*** 手机号码*/@ExcelProperty("手机号码")private String tel;/*** 名字*/@ExcelProperty("名字")private String name;/*** 性别*/@ExcelProperty("性别")private String sex;/*** 省*/@ExcelProperty("省")private String province;/*** 市*/@ExcelProperty("市")private String city;}

4、监听【重点】

package com.jiaketao.config.excel;import cn.idev.excel.context.AnalysisContext;
import cn.idev.excel.event.AnalysisEventListener;import java.util.ArrayList;
import java.util.List;/*** 快速Excel读取监听器,继承自AnalysisEventListener,用于处理Excel文件的读取事件*/
public class FastExcelReadListener<T> extends AnalysisEventListener<T> {private List<T> dataList = new ArrayList<>();/*** 当读取到一行数据时,将数据添加到dataList中* @param t 读取到的数据对象* @param analysisContext 当前分析上下文*/@Overridepublic void invoke(T t, AnalysisContext analysisContext) {dataList.add(t);}/*** 在所有数据解析完成后,打印读取到的数据条数* @param analysisContext 当前分析上下文*/@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {System.out.println("成功读取!共读取到 " + dataList.size() + " 条数据");}/*** 返回读取到的数据列表* @return 包含所有读取到的数据的列表*/public List<T> getDataList() {return dataList;}
}

5、控制层【重点】

为了直观感受,直接将业务逻辑写到了控制层【实际中业务逻辑自行写到实现类】

package com.jiaketao.controller;import cn.idev.excel.FastExcel;
import com.jiaketao.config.excel.FastExcelReadListener;
import com.jiaketao.entity.Users;
import com.jiaketao.mapper.UsersMapper;
import com.sun.deploy.net.URLEncoder;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;/*** 用户信息** @author* @since 2025-09-17*/
@RestController
@RequestMapping("/users")
@RequiredArgsConstructor
public class UsersController {@Resourceprivate UsersMapper usersMapper;/*** Excel导出** @param response* @throws IOException*/@GetMapping("/download")public void download(HttpServletResponse response) throws IOException {// 设置响应头信息response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");// 设置编码格式response.setCharacterEncoding("utf-8");// 设置文件名:可以自己自定义String fileName = URLEncoder.encode("数据列表", "UTF-8");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");//获取要导出的数据列表【可行从数据库中获取】List<Users> exportList = new ArrayList<>();for (int i = 1; i <= 10; i++) {Users data = new Users();data.setId(i);data.setTel("1380013800" + i);data.setName("张三" + i);data.setSex("男");data.setProvince("广东省");data.setCity("广州市");exportList.add(data);}// 写入数据FastExcel.write(response.getOutputStream(), Users.class).sheet("模板")// 工作簿名称【可以不写】.excludeColumnFieldNames(Arrays.asList("id"))// 导出忽略某些字段【都导出的话,可以不写】.doWrite(exportList);// 写入数据}/*** Excel导入** @param file* @return 返回响应自行定义,该方法只供参考* @throws IOException*/@PostMapping("/importData")public ResponseEntity<String> importEmp(@RequestParam("file") MultipartFile file) {if (file.isEmpty()) {return ResponseEntity.badRequest().body("请选择一个文件上传!");}try {//读取excel的内容FastExcelReadListener<Users> baseExcelListener = new FastExcelReadListener<>();FastExcel.read(file.getInputStream(), Users.class, baseExcelListener).sheet().doRead();//获取读取的数据列表List<Users> dataList = baseExcelListener.getDataList();//判断是否为空数据if (CollectionUtils.isEmpty(dataList)) {return ResponseEntity.badRequest().body("文件中没有数据!");}//新增数据到数据库的业务逻辑usersMapper.insertBatch(dataList);return ResponseEntity.ok("文件上传并处理成功!");} catch (IOException e) {return ResponseEntity.badRequest().body("文件处理失败!");}}}

6、Apifox测试

(1)导出

(2)导入

http://www.dtcms.com/a/469352.html

相关文章:

  • 做的好点的外贸网站有哪些网站建设实训指导书
  • 【Linux】Centos 8 默认OpenSSH 升级OpenSSH9.8【升级其他OpenSSH版本通用】
  • 【Nginx开荒攻略】深度解析基于域名的虚拟主机配置:从域名解析到实战部署
  • 互联网网站样式坪山建设网站建站
  • 全链路智能运维中的业务影响度评估与资源动态优化机制
  • 微信小程序学习(五)
  • Jmeter接口的负载测试概念
  • Linux-CentOS 7 上安装 MySQL 8.0.43(保姆级教程)
  • 视频分辨率4K,比特率50000kbps,电脑播放时卡顿的原因
  • 使用aspx做电影网站网站建设专用术语
  • Linux内核网络优化:两个网络调优解决方案
  • day7_vite 啊哈哈啊哈哈哈哈哈
  • 化妆品产品的自建网站哟哪些能想到的域名都被注册了
  • 网络协议的零拷贝 和 操作系统的零拷贝异同
  • Apache Drill:一款开源的分布式SQL查询引擎
  • 八年磨一剑:中品维度如何用“分布式电商”为商家打开增长新通路?
  • Linux下的Rust 与 C 的互操作性解析
  • 从“用框架”到“控系统”———架构通用能力(模块边界、分层设计、缓存策略、事务一致性、分布式思维)
  • 云南省建设厅网站舉報十大购物网站排行榜
  • 做网站什么空间比较好短视频运营方案
  • golang 读写锁 RWMutex
  • centos系统将/home分区的空间分配给/
  • Kafka系列之:Kafka事务、幂等生产者、事务生产者
  • sftpgo汉化处理
  • Java打包时,不将本地Jar打包到项目的最终 JAR 中
  • Go语言泛型全面解析:从基础到高级应用
  • 在css里优雅地使用if函数
  • 中国建设银行个人网站银行欧美在线做视频网站
  • 2018年网站开发语言如何加强英文网站建设
  • Pandas:机器学习数据处理的核心利器