Easypoi 多sheet数据导入导出

easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法。

1.引入依赖包

<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>3.2.0</version>
</dependency>

2.构建导入导出实体

@Getter
@Setter
@ToString
// 必须是public修饰
public class User {@Excel(name = "姓名")private String userName;@Excel(name = "性别")private String sex;@Excel(name = "年龄")private Integer age;public User(String userName, String sex, Integer age) {this.userName = userName;this.sex = sex;this.age = age;}public User() {}
}

3.导入导出实现方法

导入导入均是按照多个sheet导入导出实现,单个导入导出也可参照使用。

@RestController
@RequestMapping("/test")
@Slf4j
public class TestController {// 固定的名称public static final String EXPORT_TITLE = "title";public static final String EXPORT_ENTITY = "entity";public static final String EXPORT_DATA = "data";@PostMapping("/importIndex")public CxResult<Boolean> importIndex(@RequestParam("file") MultipartFile multipartFile) throws Exception {ImportParams params = new ImportParams();params.setHeadRows(1);params.setStartRows(0);params.setStartSheetIndex(0);List<User> userList = ExcelImportUtil.importExcel(multipartFile.getInputStream(), User.class, params);log.info("userList = {}", userList);ImportParams params2 = new ImportParams();params2.setHeadRows(1);params2.setStartRows(0);params2.setStartSheetIndex(1);List<User> userList2 = ExcelImportUtil.importExcel(multipartFile.getInputStream(), User.class, params2);log.info("userList2 = {}", userList2);return CxResult.success(Boolean.TRUE);}@GetMapping("/exportIndex")public void exportIndex(HttpServletResponse response) throws Exception {List<User> userList = Lists.newArrayList();userList.add(new User("张三", "男", 23));userList.add(new User("李四", "男", 24));List<User> userList1 = Lists.newArrayList();userList1.add(new User("丫丫", "女", 23));userList1.add(new User("丫蛋", "女", 24));List<Map<String, Object>> sheetsList = Lists.newArrayList();Map<String, Object> exportMap = Maps.newHashMap();exportMap.put(EXPORT_TITLE, new ExportParams(null, "男", ExcelType.HSSF));exportMap.put(EXPORT_ENTITY, User.class);exportMap.put(EXPORT_DATA, userList);sheetsList.add(exportMap);Map<String, Object> exportMap1 = Maps.newHashMap();exportMap1.put(EXPORT_TITLE, new ExportParams(null, "女", ExcelType.HSSF));exportMap1.put(EXPORT_ENTITY, User.class);exportMap1.put(EXPORT_DATA, userList1);sheetsList.add(exportMap1);Workbook workbook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.HSSF);String fileName = DateUtils.dateTimeFormat() + ".xls";response.setContentType("application/octet-stream");response.setHeader("Content-disposition", "attachment;filename=" + fileName);OutputStream outputStream = response.getOutputStream();response.flushBuffer();workbook.write(outputStream);// 写完数据关闭流outputStream.close();}}

4.Easypoi VS Easyexcel

相同点:
easypoi和easyexcel都是基于apache poi进行二次开发的。

差异点:
easypoi 在读写数据的时候,优先是先将数据写入内存,优点是读写性能非常高,但是当数据量很大的时候,会出现oom,当然它也提供了 sax 模式的读写方式,需要调用特定的方法实现。
easyexcel 基于sax模式进行读写数据,不会出现oom情况,程序有过高并发场景的验证,因此程序运行比较稳定,相对于 easypoi 来说,读写性能稍慢!

总结:
easypoi 对定制化的导出支持非常的丰富,如果当前的项目需求,并发量不大、数据量也不大,但是需要导出 excel 的文件样式千差万别,那么我推荐你用 easypoi;反之使用 easyexcel。

教程网站:

EasyPoi教程_V1.0

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

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

相关文章

RabbitMQ常见的交换机类型

RabbitMQ安装 pom.xml里导入相关的依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency> application.properties配置文件 spring.rabbitmq.hos…

Nginx - 反向代理与负载均衡

目录 一、Nginx 1.1、Nginx 下载 1.2、nginx 基础配置的认识 a&#xff09;第一部分&#xff1a;全局块 b&#xff09;第二部分&#xff1a;events 块 c&#xff09;第三部分&#xff1a;http 块 http 块中 内嵌的 server 块 1.3、一些常用配置 1.3.1、location 匹配级…

java正则表达式 及应用场景爬虫,捕获分组非捕获分组

正则表达式 通常用于校验 比如说qq号 看输入的是否符合规则就可以用这个 public class regex {public static void main(String[] args) {//正则表达式判断qq号是否正确//规则 6位及20位以内 0不能再开头 必须全是数子String qq"1234567890";System.out.println(qq…

【机器学习】sklearn特征选择(feature selection)

文章目录 特征工程过滤法&#xff08;Filter&#xff09;方差过滤相关性过滤卡方过滤F验表互信息法小结 嵌入法&#xff08;Embedded&#xff09;包装法&#xff08;Wrapper&#xff09; 特征工程 特征提取(feature extraction)特征创造(feature creation)特征选择(feature se…

【软件设计师-下午题总结】

目录 下午题之总结于学习记录&#xff1a;题一、数据流图&#xff1a;1、熟悉相关的图形2、实体名称3、数据存储4、补充缺失的数据流和起点终点5、用结构化语言描述6、描述&#xff0c;找加工逻辑的时候7、如何保持数据流平衡 题二&#xff1a;实体联系图&#xff1a;1、常用图…

Django Test

Django--Laboratory drug management and early warning system-CSDN博客 创建项目doinglms django-admin startproject doinglms python manage.py runserver 运行开发服务器(Development Server) 创建一个自定义 App,名称为 lms: python manage.py startapp lms

minio桶命名规则

一、背景 今天做项目需要上传图片到minio&#xff0c;上传失败&#xff0c;查看错误是桶未创建成功。 minio桶的创建具有自己的命名规则&#xff0c;不符合则无法创建。 二、命名规则 1、存储桶名称的长度必须介于 3&#xff08;最小&#xff09;到 63&#xff08;最大&…

【数据结构】二叉树--堆排序

目录 一 降序(建小堆) 二 升序 (建大堆) ​三 优化(以升序为例) 四 TOP-K问题 一 降序(建小堆) void Swap(int* x, int* y) {int tmp *x;*x *y;*y tmp; }//降序 建小堆 void AdjustUp(int* a, int child) {int parent (child - 1) / 2;while (child > 0){if (a[chil…

Ubuntu 22.04.3 LTS单机私有化部署sealos

推荐使用奇数台 Master 节点和若干 Node 节点操作系统 :Ubuntu 22.04 LTS内核版本 :5.4 及以上配置推荐 :CPU 4 核 , 内存 8GB, 存储空间 100GB 以上最小配置 :CPU 2 核 , 内存 4GB, 存储空间 60GB 这里采用的Ubuntu 22.04.3 LTS 版本&#xff0c;Ubuntu 20.04.4 LTS这个版本…

Electron应用的 asar 打包 解压

前言&#xff1a; .asar文件是一种归档文件格式&#xff0c;通常用于封装Electron应用程序的资源。Electron是一个使得开发者能够使用Web技术构建跨平台桌面应用程序的框架。为了提高性能和简化部署&#xff0c;Electron应用程序的资源通常会被打包到一个.asar文件中。 安装 as…

Eclipse插件安装版本不兼容问题解决方案——Papyrus插件为例

项目场景: Eclipse Papyrus安装后,没有新建Papyrus工程选项,也没有新建Papyrus Model的选项。 打开Papyrus Model会报错 问题描述 同样的,安装其他插件也是。可能某个插件之前安装是好用的,结果Eclipse的版本更新了,就再也安装不好用了 原因分析: 根本原因是因为包之…

动态规划 -背包问题-详解

问题 注&#xff1a;大佬对此类问题的解法&#xff1a;动态规划背包问题总结 给你一个由 不同 整数组成的数组 nums &#xff0c;和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保证答案符合 32 位整数范围。 示例 1&#xff…

Xcode 15下,包含个推的项目运行时崩溃的处理办法

升级到Xcode15后&#xff0c;部分包含个推的项目在iOS17以下的系统版本运行时&#xff0c;会出现崩溃&#xff0c;由于崩溃在个推Framework内部&#xff0c;无法定位到具体代码&#xff0c;经过和个推官方沟通&#xff0c;确认问题是项目支持的最低版本问题。 需要将项目的最低…

centos7 离线部署Chrome 117,并配置chromedriver

1.百度云下载安装包 百度云地址:链接&#xff1a;https://pan.baidu.com/s/1KYqLcbht8SFu0uuA_4xftQ 提取码&#xff1a;fsdj 2.上传到服务器解压缩 unzip chrome.zip 3.进入到解压后的chrome目录 cd chrome 4.执行安装命令 rpm -Uvh *.rpm --nodeps --force 安装路径是…

【C语言好题系列三】

文章目录 学习导航一. 选择题二. 编程题(力扣/牛客网&#xff09;三. 总结 学习导航 一. 选择题 如下程序的运行结果是&#xff08;D&#xff09; char c[5]{a, b, \0, c, \0}; printf("%s", c);A: ‘a’ ‘b’ B: ab\0c\0 C: ab c D: ab 答案解析&#xff1a; 正…

基于症状自评量表SCL90的人才测评之心理素质测验

目录 简介 什么是《症状自评量表SCL90》 测试过程 评估内容及结果分析 简介 心理素质是人的整体素质的组成部分&#xff0c;一个人的心理素质是在先天素质的基础上&#xff0c;经过后天的环境与教育的影响而逐步形成的。心理素质包括人的认识能力、情绪和情感品质、意志品…

11在SpringMVC中响应到浏览器的数据格式,@ResponseBody注解和@RestController复合注解的功能详解

响应数据/转发或重定向页面 参考文章数据交换的常见格式,如JSON格式和XML格式 服务器将接收到请求处理完以后需要将处理结果告知给浏览器即响应,通常有响应要转发/重定向到的页面和响应数据(文本数据/json数据)两种方式 如果控制器方法返回值类型为void并且没有通过response…

十七、【渐变工具组】

文章目录 渐变工具油漆桶工具 渐变工具 渐变样式有5种&#xff0c;分别是线性渐变&#xff0c;径向渐变&#xff0c;角度渐变&#xff0c;对称渐变&#xff0c;菱形渐变 另外渐变工具的颜色可以进行编辑&#xff0c;需要先打开渐变编辑工具&#xff1a; 如何使用渐变编辑工…

与HTTP相关的各种概念

网络世界 网络世界中最重要的一个名词就是互联网&#xff08;Internet&#xff09;,它以TCP/IP协议族为基础&#xff0c;构建成了一望无际的信息传输网络。而我们通常所说的“上网”&#xff0c;主要就是访问互联网的一个子集——万维网&#xff08;World Wide Web&#xff09…

如何使用CSS和JavaScript实施暗模式?

近年来&#xff0c;暗模式作为用户界面选项备受追捧。它提供了更暗的背景和更亮的文本&#xff0c;不仅可以减轻眼睛疲劳&#xff0c;还可以节省电池续航时间&#xff0c;尤其是在OLED屏幕上。 不妨了解如何结合使用CSS和JavaScript为网站和Web应用程序添加暗模式选项。 了解暗…