EasyExcel简介
EasyExcel官网
Apache POI 技术在Excel 的数据量非常大的时候,会将整个 Excel 的内容全部读出来放入到内存中,所以内存消耗非常严重,如果同时进行包含大数据量的 Excel 读操作,很容易造成内存溢出问题。EasyExcel 的出现很好的解决了 POI 相关问题,原本一个 5M 的 Excel 用 POI 需要180M左右内存, 而 EasyExcel 可以将其降低到几 M,同时再大的 Excel 都不会出现内存溢出的情况,因为是逐行读取 Excel 的内容
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Goods implements Serializable {
private static final long serialVersionUID = -2737659835949653933L;
/**
* 商品编号
*/
@ExcelProperty(value = "编号")
private Integer id;
/**
* 商品名称
*/
@ExcelProperty("商品名称")
private String name;
/**
* 市场价格
*/
@ExcelProperty("市场价格")
private double price1;
/**
* 会员价格
*/
@ExcelProperty("会员价格")
private double price2;
/**
* 商品库存数量
*/
@ExcelProperty("库存数量")
private Integer amount;
}
生成Excel文件
public static void main(String[] args) {
final ArrayList arrayList = new ArrayList();
for(int i =10;i= BATCH_COUNT) {
System.out.println("已经解析"+list.size()+"条数据");
list.clear();
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
System.out.println("存储数据库成功!");
System.out.println("所有数据解析完成!");
}
}
说明:从这里可以看出,虽然是逐行解析数据,但我们可以自定义阈值,完成数据的批处理操作,可见 EasyExcel 操作的灵活性
- 具体的读取Excel的代码:
public static void main(String[] args) {
EasyExcel.read("demo1635823544855.xlsx", Goods.class, new GoodsExcelListener())
.sheet()
.doRead();
}