龙空技术网

Excel神具EasyExcel,常见API

米兜同学 166

前言:

此时看官们对“java读取excel文件内存溢出”可能比较着重,看官们都想要分析一些“java读取excel文件内存溢出”的相关文章。那么小编也在网络上汇集了一些有关“java读取excel文件内存溢出””的相关资讯,希望我们能喜欢,姐妹们一起来学习一下吧!

一、前言

Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用POI sax依然需要100M左右内存降低到几M,并且再大的excel不会出现内存溢出,03版依赖POI的sax模式。在上层做了模型转换的封装,让使用者更加简单方便。

下面我们来简单学习一下EasyExcel的常用API。

二、关于常见类解析

EasyExcel 入口类,用于构建开始各种操作ExcelReaderBuilder ExcelWriterBuilder 构建出一个 ReadWorkbook WriteWorkbook,可以理解成一个excel对象,一个excel只要构建一个ExcelReaderSheetBuilder ExcelWriterSheetBuilder 构建出一个 ReadSheet WriteSheet对象,可以理解成excel里面的一页,每一页都要构建一个ReadListener 在每一行读取完毕后都会调用ReadListener来处理数据WriteHandler 在每一个操作包括创建单元格、创建表格等都会调用WriteHandler来处理数据所有配置都是继承的,Workbook的配置会被Sheet继承,所以在用EasyExcel设置参数的时候,在EasyExcel...sheet()方法之前作用域是整个sheet,之后针对单个sheet

三、读

(1)注解ExcelProperty 指定当前字段对应excel中的那一列。可以根据名字或者Index去匹配。当然也可以不写,默认第一个字段就是index=0,以此类推。千万注意,要么全部不写,要么全部用index,要么全部用名字去匹配。千万别三个混着用,除非你非常了解源代码中三个混着用怎么去排序的。ExcelIgnore 默认所有字段都会和excel去匹配,加了这个注解会忽略该字段DateTimeFormat 日期转换,用String去接收excel日期格式的数据会调用这个注解。里面的value参照java.text.SimpleDateFormatNumberFormat 数字转换,用String去接收excel数字格式的数据会调用这个注解。里面的value参照java.text.DecimalFormatExcelIgnoreUnannotated 默认不加ExcelProperty 的注解的都会参与读写,加了不会参与

(2)参数通用参数

ReadWorkbook,ReadSheet 都会有的参数,如果为空,默认使用上级。

converter 转换器,默认加载了很多转换器。也可以自定义。readListener 监听器,在读取数据的过程中会不断的调用监听器。headRowNumber 需要读的表格有几行头数据。默认有一行头,也就是认为第二行开始起为数据。head 与clazz二选一。读取文件头对应的列表,会根据列表匹配数据,建议使用class。clazz 与head二选一。读取文件的头对应的class,也可以使用注解。如果两个都不指定,则会读取全部数据。autoTrim 字符串、表头等数据自动trimpassword 读的时候是否需要使用密码

ReadWorkbook(理解成excel对象)参数excelType 当前excel的类型 默认会自动判断inputStream 与file二选一。读取文件的流,如果接收到的是流就只用,不用流建议使用file参数。因为使用了inputStream easyexcel会帮忙创建临时文件,最终还是filefile 与inputStream二选一。读取文件的文件。autoCloseStream 自动关闭流。readCache 默认小于5M用 内存,超过5M会使用 EhCache,这里不建议使用这个参数。useDefaultListener @since 2.1.4 默认会加入ModelBuildEventListener 来帮忙转换成传入class的对象,设置成false后将不会协助转换对象,自定义的监听器会接收到Map<Integer,CellData>对象,如果还想继续接听到class对象,请调用readListener方法,加入自定义的beforeListener、 ModelBuildEventListener、 自定义的afterListener即可。

ReadSheet(就是excel的一个Sheet)参数sheetNo 需要读取Sheet的编码,建议使用这个来指定读取哪个SheetsheetName 根据名字去匹配Sheet,excel 2003不支持根据名字去匹配

四、写

(1)注解ExcelProperty index 指定写到第几列,默认根据成员变量排序。value指定写入的名称,默认成员变量的名字,多个value可以参照快速开始中的复杂头ExcelIgnore 默认所有字段都会写入excel,这个注解会忽略这个字段DateTimeFormat 日期转换,将Date写到excel会调用这个注解。里面的value参照java.text.SimpleDateFormatNumberFormat 数字转换,用Number写excel会调用这个注解。里面的value参照java.text.DecimalFormatExcelIgnoreUnannotated 默认不加ExcelProperty 的注解的都会参与读写,加了不会参与

(2)参数通用参数

WriteWorkbook,WriteSheet ,WriteTable都会有的参数,如果为空,默认使用上级。

converter 转换器,默认加载了很多转换器。也可以自定义。writeHandler 写的处理器。可以实现WorkbookWriteHandler,SheetWriteHandler,RowWriteHandler,CellWriteHandler,在写入excel的不同阶段会调用relativeHeadRowIndex 距离多少行后开始。也就是开头空几行needHead 是否导出头head 与clazz二选一。写入文件的头列表,建议使用class。clazz 与head二选一。写入文件的头对应的class,也可以使用注解。autoTrim 字符串、表头等数据自动trim

WriteWorkbook(理解成excel对象)参数excelType 当前excel的类型 默认xlsxoutputStream 与file二选一。写入文件的流file 与outputStream二选一。写入的文件templateInputStream 模板的文件流templateFile 模板文件autoCloseStream 自动关闭流。password 写的时候是否需要使用密码useDefaultStyle 写的时候是否是使用默认头

WriteSheet(就是excel的一个Sheet)参数sheetNo 需要写入的编码。默认0sheetName 需要些的Sheet名称,默认同sheetNo

WriteTable(就把excel的一个Sheet,一块区域看一个table)参数tableNo 需要写入的编码。默认0

五、参考地址

EasyExcel

标签: #java读取excel文件内存溢出