Easy-POI

SpringBoot加Poi仿照EasyPoi实现Excel导出

浪子不回头ぞ 提交于 2021-02-10 08:02:30
POI提供API给Java程序对Microsoft Office格式档案读和写的功能,详细功能可以直接查阅API,因为使用EasyPoi过程中总是缺少依赖,没有搞明白到底是什么坑,索性自己写一个简单工具类,来实现无论传入任何对象集合,都能够实现导出Excel的功能,没有看EasyPoi的源码, 只是在功能上模仿一下。 首先导入基本依赖,除了SpringBoot基本依赖依赖,导入Poi的依赖 <!-- https: // mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version> 3.17 </version> </dependency> <!-- https: // mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version> 3.17 </version> </dependency> 编写自定义注解 @Retention

10w行级别数据的Excel导入优化记录

为君一笑 提交于 2021-02-09 20:06:34
作者:后青春期的Keats www.cnblogs.com/keatsCoder/p/13217561.html 需求说明 项目中有一个 Excel 导入的需求:缴费记录导入 由实施 / 用户 将别的系统的数据填入我们系统中的 Excel 模板,应用将文件内容读取、校对、转换之后产生欠费数据、票据、票据详情并存储到数据库中。 在我接手之前可能由于之前导入的数据量并不多没有对效率有过高的追求。但是到了 4.0 版本,我预估导入时Excel 行数会是 10w+ 级别,而往数据库插入的数据量是大于 3n 的,也就是说 10w 行的 Excel,则至少向数据库插入 30w 行数据。 因此优化原来的导入代码是势在必行的。我逐步分析和优化了导入的代码,使之在百秒内完成(最终性能瓶颈在数据库的处理速度上,测试服务器 4g 内存不仅放了数据库,还放了很多微服务应用。处理能力不太行)。具体的过程如下,每一步都有列出影响性能的问题和解决的办法。 导入 Excel 的需求在系统中还是很常见的,我的优化办法可能不是最优的,欢迎读者在评论区留言交流提供更优的思路 一些细节 数据导入: 导入使用的模板由系统提供,格式是 xlsx (支持 65535+行数据) ,用户按照表头在对应列写入相应的数据 数据校验: 数据校验有两种: 字段长度、字段正则表达式校验等,内存内校验不存在外部数据交互。对性能影响较小

超级简单POI导出Excel实战

陌路散爱 提交于 2020-12-06 03:16:14
在一般的生产管理系统都会将数据通过页面导出到Excel,这里以Java为例通过第三方开源poi进行对Excel的操作,具体操作如下 1.引入jar包依赖 这里我以maven的方式引入jar包,具体依赖如下 < dependency > < groupId > cn.afterturn </ groupId > < artifactId > easypoi-base </ artifactId > < version > 3.2.0 </ version > </ dependency > 2.创建自定义导出Excel样式类 package com.sunny.spring.boot.poi.common; import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.IndexedColors;

easyExcel一对多模板导出合并

不羁的心 提交于 2020-11-06 17:55:42
最近的项目做导出,说是简单的项目,就选了easyExcel,没想到后来做了一对多复杂导出。看了一下api发现复杂的填充Excel也只是没有一对多的填充。看到easyPOI导出可以一对多导出,引入项目,调了一天,最后发现只能一在前,多在后才能正常点合并单元格,但是模板被改了(不知道是不是因为同时引入easyExcel和easyPOI导致的冲突,我复原到原来的一对一导出,模板还是被改了,后来取消引入easyPOI才正常)。后来百度了一下easyExcel一对多导出的,都没有找到比较仔细的步骤,后来发现了可以easyExcel可以自定义合并单元格,于是就开始写了。可能比较low。但是还是记录一下,说不定能帮上谁的忙。 图一是导出结果,图二是导出模板 图一 图二 先说说思路,这是一次模板填充导出。导出的时候填充的List对象是没有子类的对象List<ResetStatiExportDto> exportDtos,我们从数据库获取的(这里我用for循环填充就好了)一对多的对象是包含子类集合的List集合List<ResetStatiDto> statiDtos。下面是步骤: 一、我们拿到statiDtos后,先转成exportDtos作为填充Excel的数据。 二、自定义合并单元格策略,合并的列已经固定好,合并的行从statiDtos获取,如果有子类集合

10w行级别数据的Excel导入优化记录

旧时模样 提交于 2020-10-16 08:52:21
需求说明 项目中有一个 Excel 导入的需求:缴费记录导入 由实施 / 用户 将别的系统的数据填入我们系统中的 Excel 模板,应用将文件内容读取、校对、转换之后产生欠费数据、票据、票据详情并存储到数据库中。 在我接手之前可能由于之前导入的数据量并不多没有对效率有过高的追求。但是到了 4.0 版本,我预估导入时Excel 行数会是 10w+ 级别,而往数据库插入的数据量是大于 3n 的,也就是说 10w 行的 Excel,则至少向数据库插入 30w 行数据。因此优化原来的导入代码是势在必行的。我逐步分析和优化了导入的代码,使之在百秒内完成(最终性能瓶颈在数据库的处理速度上,测试服务器 4g 内存不仅放了数据库,还放了很多微服务应用。处理能力不太行)。具体的过程如下,每一步都有列出影响性能的问题和解决的办法。 导入 Excel 的需求在系统中还是很常见的,我的优化办法可能不是最优的,欢迎读者在评论区留言交流提供更优的思路 声明:本文首发于博客园,作者:后青春期的Keats;地址: https://www.cnblogs.com/keatsCoder/ 转载请注明,谢谢! 一些细节 数据导入:导入使用的模板由系统提供,格式是 xlsx (支持 65535+行数据) ,用户按照表头在对应列写入相应的数据 数据校验:数据校验有两种: 字段长度、字段正则表达式校验等

Springboot+Poi实现Excel的导入导出

◇◆丶佛笑我妖孽 提交于 2020-08-13 12:29:57
目录 POI操作Excel EasyPOI操作Excel 解决不同浏览器导出excel中文名称乱码问题 使用POI将HTML Table导出Excel 代码: https://gitee.com/typ1805/springboot-master POI操作Excel 一、poi简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 1、HSSF: HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。 2、POI EXCEL文档结构类 HSSFWorkbook excel文档对象 HSSFSheet excel的sheet HSSFRow excel的行 HSSFCell excel的单元格 HSSFFont excel字体 HSSFName 名称 HSSFDataFormat 日期格式 HSSFHeader sheet头 HSSFFooter sheet尾 HSSFCellStyle cell样式 HSSFDateUtil 日期 HSSFPrintSetup 打印

EasyPoi实现多语言国际化

半城伤御伤魂 提交于 2020-08-06 17:05:47
学而时习之,不亦说乎 利用反射修改注解中的值 实现这个功能,主要是为了解决EasyPoi中未实现多语言国际化的问题 EasyPoi通过简单的导出工具类,配合实体类中增加的相应注解,实现数据的Excel导出功能。 但如何实现表头多语言国际化的功能,根据传入的语言标识,来确定表头部分的文字是简体中文,还是繁体中文,还是英文。 主要的思路是,利用反射原理,获取注解中对应的值,并对该值进行修改。 如下简单创建一个实体类,增加easypoi的@Excel注解,注解中name的值,即是导出的时候表头的信息,现在以逗号分隔三种语言的文字,根据传入语言标识,重新设置对应的文字。 @Data public class StaOrgPost { @Excel(name = "岗位名称,崗位名稱,Post Name" , width = 40) private String postName; @Excel(name = "岗位人数,崗位人數,Post Count" , width = 10) private Integer userCnt; } 创建一个导出语言工具类,利用反射,重新赋予@Excel中name字段的值 public class ExcelLangUtils { private static final int VALUE_SIZE = 3 ; private

10w行级别数据的Excel导入优化记录

99封情书 提交于 2020-08-05 06:16:40
需求说明 项目中有一个 Excel 导入的需求:缴费记录导入 由实施 / 用户 将别的系统的数据填入我们系统中的 Excel 模板,应用将文件内容读取、校对、转换之后产生欠费数据、票据、票据详情并存储到数据库中。 在我接手之前可能由于之前导入的数据量并不多没有对效率有过高的追求。但是到了 4.0 版本,我预估导入时Excel 行数会是 10w+ 级别,而往数据库插入的数据量是大于 3n 的,也就是说 10w 行的 Excel,则至少向数据库插入 30w 行数据。因此优化原来的导入代码是势在必行的。我逐步分析和优化了导入的代码,使之在百秒内完成(最终性能瓶颈在数据库的处理速度上,测试服务器 4g 内存不仅放了数据库,还放了很多微服务应用。处理能力不太行)。具体的过程如下,每一步都有列出影响性能的问题和解决的办法。 导入 Excel 的需求在系统中还是很常见的,我的优化办法可能不是最优的,欢迎读者在评论区留言交流提供更优的思路 声明:本文首发于博客园,作者:后青春期的Keats;地址: https://www.cnblogs.com/keatsCoder/ 转载请注明,谢谢! 一些细节 数据导入:导入使用的模板由系统提供,格式是 xlsx (支持 65535+行数据) ,用户按照表头在对应列写入相应的数据 数据校验:数据校验有两种: 字段长度、字段正则表达式校验等

pom.xml引用easypoi组件,发生 WebFlux 和 WebMVC 冲突

南笙酒味 提交于 2020-08-04 23:36:22
easypoi 组件 exclusion 排除 webmvc 引用 <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>3.3.0</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-web</artifactId> <version>3.3.0</version> <exclusions> <exclusion> <artifactId>spring-webmvc</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency> 来源: oschina 链接: https://my.oschina.net/chinahome/blog/4293916

10w行级别数据的Excel导入优化记录

两盒软妹~` 提交于 2020-07-28 06:09:18
需求说明 项目中有一个 Excel 导入的需求:缴费记录导入 由实施 / 用户 将别的系统的数据填入我们系统中的 Excel 模板,应用将文件内容读取、校对、转换之后产生欠费数据、票据、票据详情并存储到数据库中。 在我接手之前可能由于之前导入的数据量并不多没有对效率有过高的追求。但是到了 4.0 版本,我预估导入时Excel 行数会是 10w+ 级别,而往数据库插入的数据量是大于 3n 的,也就是说 10w 行的 Excel,则至少向数据库插入 30w 行数据。因此优化原来的导入代码是势在必行的。我逐步分析和优化了导入的代码,使之在百秒内完成(最终性能瓶颈在数据库的处理速度上,测试服务器 4g 内存不仅放了数据库,还放了很多微服务应用。处理能力不太行)。具体的过程如下,每一步都有列出影响性能的问题和解决的办法。 导入 Excel 的需求在系统中还是很常见的,我的优化办法可能不是最优的,欢迎读者在评论区留言交流提供更优的思路 声明:本文首发于博客园,作者:后青春期的Keats;地址: https://www.cnblogs.com/keatsCoder/ 转载请注明,谢谢! 一些细节 数据导入:导入使用的模板由系统提供,格式是 xlsx (支持 65535+行数据) ,用户按照表头在对应列写入相应的数据 数据校验:数据校验有两种: 字段长度、字段正则表达式校验等