EasyExcel实现Excel文件多sheet导入导出

一、概述

最近公司需要做一个需求,通过excel上传病例信息,并将病例信息进行归档和整理;该需求可以简化为excel模板下载和excel上传并解析归档。既然知道需求了,找excel的操作工具jar包吧,发现以前常用的poi需要写的代码太多,但是时间紧急,没办法只能找新的工具。easypoi 在读写数据的时候,优先是先将数据写入内存,优点是读写性能非常高,但是当数据量很大的时候,会出现oom,当然它也提供了 sax 模式的读写方式,需要调用特定的方法实现。病例的信息量可能会很大,很有可能会造成内存溢出,没办法,再找吧!easyexcel 基于sax模式进行读写数据,不会出现oom情况,程序有过高并发场景的验证,因此程序运行比较稳定,相对于 easypoi 来说,虽然读写性能稍慢,但是更符合我目前的开发场景。

二、easypoi实例

easypoi 的亮点就是基于注解实体类来实现导入、导出excel,使用起来非常简单!

1. jar包引入

<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.1.0</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>4.1.0</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>4.1.0</version></dependency>

2. 创建实体注解类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserEntity {@Excel(name = "姓名")private String name;@Excel(name = "年龄")private int age;@Excel(name = "操作时间",format="yyyy-MM-dd HH:mm:ss", width = 20.0)private Date time;
}

3. 导出业务

public static void main(String[] args) throws Exception {List<UserEntity> dataList = new ArrayList<>();for (int i = 0; i < 10; i++) {UserEntity userEntity = new UserEntity();userEntity.setName("李四" + i);userEntity.setAge(30 + i);userEntity.setTime(new Date(System.currentTimeMillis() + i));dataList.add(userEntity);}//生成excel文档Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("用户","用户信息"),UserEntity.class, dataList);FileOutputStream fos = new FileOutputStream("D:/easypoi-user1.xls");workbook.write(fos);fos.close();
}

4. 导入业务

public static void main(String[] args) {ImportParams params = new ImportParams();params.setTitleRows(1);params.setHeadRows(1);long start = new Date().getTime();List<Map<String, Object>> list = ExcelImportUtil.importExcel(new File("D:/easypoi-user2.xls"),Map.class, params);System.out.println(new Date().getTime() - start);System.out.println(JSONArray.toJSONString(list));
}

更多操作方法,请查阅easypoi指导手册,里面的介绍很详细,操作表格相当灵活多变。

三、easyExcel实例

1. jar包引入

!-- poi操作excel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.10</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.0.1</version></dependency>

2. 创建实体注解类


/*** 演示表-个人基础信息*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class FirstSheetVO {@ExcelProperty(value = "序号",index = 0)private Integer orderNum;@ExcelProperty(value = "姓名",index = 1)private String name;@ExcelProperty(value = "年龄",index = 2)private Integer age;@ExcelProperty(value = "性别",index = 3)private String gender;@ExcelProperty(value = "职业",index = 4)private String professional;@ExcelProperty(value = "出生日期")private Date birthDate;
}/*** 演示表-个人详细信息*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SecondSheetVO {@ExcelProperty(value = "序号",index = 0)private Integer orderNum;@ExcelProperty(value = "学历",index = 1)private String education;@ExcelProperty(value = "工作地点",index = 2)private String workplace;
}

3. 导出业务(多表写入)

easyExcel导入.png

    @GetMapping("/export")public void exportExcel(HttpServletResponse response){String file_name = null;try {file_name = new String("dicom影像描述匹配模板1.0".getBytes(), "ISO-8859-1");response.setContentType("application/vnd.ms-excel");response.setHeader("Content-Disposition","attachment;filename="+file_name+".xlsx");List<FirstSheetVO> firstSheetVOS = new ArrayList<>();FirstSheetVO firstSheetVO = new FirstSheetVO();firstSheetVO.setOrderNum(1);firstSheetVO.setAge(24);firstSheetVO.setBirthDate(new Date());firstSheetVO.setGender("男");firstSheetVO.setProfessional("教师");firstSheetVO.setName("李华");firstSheetVOS.add(firstSheetVO);List<SecondSheetVO> secondSheetVOS = new ArrayList<>();SecondSheetVO secondSheetVO = new SecondSheetVO();secondSheetVO.setOrderNum(1);secondSheetVO.setEducation("本科");secondSheetVO.setWorkplace("广东");secondSheetVOS.add(secondSheetVO);// 表一写入ExcelWriter writer = EasyExcel.write(response.getOutputStream(), FirstSheetVO.class).build();WriteSheet sheet = EasyExcel.writerSheet(0, "基础信息").build();writer.write(firstSheetVOS,sheet);// 表二写入WriteSheet sheet2 = EasyExcel.writerSheet(1, "详细信息").head(SecondSheetVO.class).build();writer.write(secondSheetVOS,sheet2);// 关闭流writer.finish();} catch (Exception e) {e.printStackTrace();}}

控制台执行结果:

表序号:0
表名:Sheet1
{0=1, 1=小明, 2=26, 3=男, 4=教师, 5=1995/11/23}
{0=2, 1=小花, 2=25, 3=女, 4=幼师, 5=1993/8/26}
表序号:1
表名:Sheet2
{0=1, 1=本科, 2=九江}
{0=2, 1=大专, 2=武汉}

4. 导入业务

    @PostMapping("/upload")public String upload(MultipartFile file){try {ExcelReader reader = EasyExcel.read(file.getInputStream()).build();List<ReadSheet> sheets = reader.excelExecutor().sheetList();for (int i = 0; i < sheets.size(); i++) {ReadSheet readSheet = sheets.get(i);System.out.println("表序号:" + readSheet.getSheetNo());System.out.println("表名:" + readSheet.getSheetName());List<Object> objects = EasyExcel.read(file.getInputStream()).sheet(i).doReadSync();objects.forEach(System.out::println);}} catch (IOException e) {log.info(e.getMessage(),e);return "fail";}return "success";}

导出结果展示:
OFJUn1.png
更多操作方法,请查阅easyExcel指导手册,里面的介绍很详细。

五、总结

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

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

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

相关文章

导入导出excel表格EasyExcel操作

一、添加依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.3</version> </dependency>二、创建实体类 /*** 创建User类,用于构建向Excel表格中写数据的类型;* ExcelPropert…

EasyExcel的导入导出使用

1、说明 EasyExcel是阿里出的一款基于Java的、快速、简洁、解决大文件内存溢出的处理Excel的开源工具&#xff0c;本文主要是使用这个工具对Excel导入导出进行讲解。 官网&#xff1a; https://easyexcel.opensource.alibaba.com/github&#xff1a; https://github.com/alib…

EasyExcel实现execl导入导出

引言 在实际开发中&#xff0c;处理 Excel 文件是一个常见的需求。EasyExcel 是一个基于 Java 的开源库&#xff0c;提供了简单易用的 API&#xff0c;可以方便地读取和写入 Excel 文件。本文将介绍如何使用 EasyExcel 实现 Excel 导入功能&#xff0c;以及一些相关的技巧和注…

导入Excel---post提交通用版

前端界面 通过点击导入弹出一个文本框下载导入的模板 直接进入代码实现环节: 前端部分添加导入按钮: <a href"javascript:;" class"btn btn-primary radius professional_btn">导入</a> 导入的文本框 //导入 $(".professional_btn&qu…

EasyExcel实现Excel文件导入导出

1 EasyExcel简介 EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。 github地址: https://github.com/alibaba/easyexcel 官方文档: https://www.yuque.com/easyexcel/doc/easyexcel B站视频: https://www.bilib…

导出Excel表格(调用后端接口方式)

在开发中我们会遇到导出Excel表格的需求&#xff0c;但是导出分为前端生成和后端生成。 前端生成的方式CSDN其他小伙伴已经做出了很多教程&#xff0c;是依赖 xlsx插件。 但是&#xff0c;今天我讲的是&#xff0c;调用后端接口的方式生成Excel表格。 1.调用后端提供的导出接口…

如何快速构建网站chatgpt插件

在本文中&#xff0c;我们将一步一步地探索并构建一个名为"AI Prompt Testing"的项目。该项目是一个网站插件&#xff0c;旨在帮助网站生成一个ChatGPT提示测试题&#xff0c;以巩固当前网页的内容。 1、抽象提取 这个网站chatgpt插件大概的效果&#xff0c;类比的…

【ChatGPT】ChatGPT 高质量资源列表:3000 多个提示、示例、用例、工具、API、扩展、失败和其他资源的集合。

ChatGPT 高质量资源列表:3000 多个提示、示例、用例、工具、API、扩展、失败和其他资源的集合。 更新了 4 月 25 日,集成自治代理 AI 部分。 图片来源:作者,Midjourney。 目录 ChatGPT 高质量资源列表:3000 多个提示、示例、用例、工具、API、扩展、失败和其他资源的集合。…

伟大的创造不是计划出来的!来自OpenAI科学家的反直觉建议

来源 | 中国企业家杂志 每天几乎从一睁眼&#xff0c;我们的工作与生活都会被大大小小的目标所牵引。 诚然&#xff0c;若只想实现一些普普通通的小愿望&#xff0c;那么目标导向会非常有效。但对于那些与探索创造、创新发明有关的愿望&#xff0c;目标还有效吗&#xff1f; 近…

GitHub放大招!CEO现场挑战18分钟开发小游戏,人还在台上网友已经玩到了

梦晨 明敏 发自 凹非寺量子位 | 公众号 QbitAI GitHub CEO&#xff0c;直播AI写代码&#xff0c;挑战18分钟完成一个小游戏。 结果只用了不到15分钟&#xff0c;直接成功在线部署&#xff0c;这边人还在讲台上&#xff0c;全球网友已经能玩上了。 整个项目从一片空白的新建文件…

字节跳动副总裁谢欣:未来组织的30条思考

上一篇&#xff1a;支付系统就该这么设计&#xff0c;稳的一批&#xff01;&#xff01; 透明、共享是是创造愉悦工作环境、吸引牛人的前提&#xff0c;是弹性组织有效运作的根基&#xff0c;是未来组织的基石。 来源 | 华麓之音 01 组织升级&#xff1a; 员工需要被激发&#…

用ChatGPT实际沟通的结果[有图有真相]

笔者因为没有办法正常注册账号&#xff0c;所以使用的是试用版的chatgpt&#xff0c;语言模型当下试用版的是Chatgpt3.5的模型&#xff0c;而不是商用版的ChatGPT-4的模型。 首先问AI对单词词汇的含义的理解。 回答的很得体&#xff0c; 然后问对职业的区分&#xff0c;这些我都…

CnOpenData·A股上市公司标准数据

一、数据简介 按照《中华人民共和国标准化法》的定义&#xff0c;标准是指农业、工业、服务业以及社会事业等领域需要统一的技术要求。标准作为一种通用性的规范语言&#xff0c;在合理利用国家资源、保障产品质量、提高市场信任度、促进商品流通、维护公平竞争、保障安全等方面…

ChatGPT炒股:批量下载北交所上市公司的招股说明书

打开北京证券交易所官网&#xff0c;点击发行上市&#xff0c;然后点击公开发行信息披露&#xff0c;然后在查询框里面输入关键词&#xff1a;在北京证券交易所上市招股说明书&#xff0c;然后选择时间&#xff0c;点击查询&#xff0c;就可以看到所有北交所上市公司的招股说明…

万兴科技WondershareFilmora焕新上线已率先接入ChatGPT母公司OpenAI相关服务

AIGC加速布局&#xff01;近日&#xff0c;创意软件A股上市公司万兴科技&#xff08;300624.SZ&#xff09;旗下视频创意软件Wondershare Filmora焕新上线&#xff0c;新版本全新接入ChatGPT母公司OpenAI相关服务&#xff0c;率先在视频创作领域集成AIGC新技术。另据介绍&#…

巴比特 | 元宇宙每日必读:多家上市公司宣布将ChatGPT与虚拟数字人融合,是蹭概念,还是真未来?...

摘要&#xff1a;据财联社星矿数据统计&#xff0c;截至目前&#xff0c;A股中包括元隆雅图、风语筑、天娱数科等17家上市公司公布称&#xff0c;相关业务已经接入类似ChatGPT技术&#xff0c;或正在研究相关技术与数字人结合的应用场景。多位业内人士表示&#xff0c;接入Chat…

ChatGPT 回答什么是敏捷测试

Jenkins 官方文档&#xff1a;https://jenkins.io/doc/JUnit 插件文档&#xff1a;JUnit | Jenkins pluginTestNG 插件文档&#xff1a;https://plugins.jenkins.io/testng-plugin/Jenkins 教程&#xff1a;https://jenkins.io/doc/tutorials/JUnit 教程&#xff1a;JUnit 5 Us…

chatGPT回答如何使用axios?

Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;可以用于浏览器和 node.js 中。 要使用 Axios&#xff0c;首先需要在项目中安装它&#xff1a; npm install axios然后&#xff0c;可以在你的代码中引入 Axios&#xff1a; const axios require(axios);或者&#xf…

面试题总结

1.js的数据类型 分为基本数据类型和引用数据类型。 基本数据类型 ES5的5种&#xff1a;Null&#xff0c;undefined&#xff0c;Boolean&#xff0c;Number&#xff0c;String&#xff0c; ES6新增&#xff1a;Symbol表示独一无二的值 ES10新增&#xff1a;BigInt 表示任意大的…

市场营销新视角,从这一步开始与竞对拉开距离|身份云研究院

2022 年&#xff0c;所有市场人都在讨论 AIGC 将带来怎样的内容创作变革&#xff0c;在迅速拥抱新技术以及新机遇的同时&#xff0c;不断成长的生成式 AI 也为很多市场人带来了危机。 以 ChatGPT 为例&#xff0c;它可以搜集互联网中的权威信息&#xff0c;迅速撰写出一份你需要…