【案例】--EasyExcel解析文件案例

目录

  • 一、前言
  • 二、EasyExcel解析文件
    • 2.1、EasyExcel选型
    • 2.2、如何存储excel解析的文件
    • 2.3、解析格式规则的excel文件
    • 2.4、解析未知格式规则的excel文件

一、前言

最近项目中,需要对excel、csv等文件进行解析,并做相关的业务功能。在实际业务中,遇到不少难题:
(1)、excel、csv格式未知,如果解析并合理存储数据?
(2)、对于大文件上传或多文件上传,如何保证系统性能和提高效率?

本篇文章,我们主要介绍的是EasyExcel如何解析各类格式的文档,并合理存储数据的技术方案思路。

二、EasyExcel解析文件

2.1、EasyExcel选型

EasyExcel类是一套基于Java的开源Excel解析工具类,相较于传统的框架如Apache poi、jxl等更加快速、简洁,还可以解决大文件内存溢出问题,即能让使用者在不用考虑性能、内存的等因素的情况下,快速完成Excel的读(导入)、写(导出)等功能。
针对excel、csv文件进行解析,这里介绍EasyExcel来解析。参考
https://easyexcel.opensource.alibaba.com/docs/current/
主要有四类监听器:

名称	                                 说明
AnalysisEventListener < T >	 分析事件侦听器:接收解析的每条数据的返回。
SyncReadListener	            同步读取侦听器。
AbstractIgnoreExceptionReadListener	抽象忽略异常读取侦听器。
ModelBuildEventListener	     模型构建事件侦听器。

2.2、如何存储excel解析的文件

【案例】--EasyExcel解析文件案例_第1张图片
大部分excel形式如上是n*m的矩阵。那么解析的数据也准备按照这里的规则解析出,并且可以有效的查询需要的数据。因此,对应的设计两个表:file_info表、sheet_file表。
file_info表主要生成一个文件id【这个文件id可以关联到上传存储到mongodb,以便下载】,sheet_list还是对这个文件的每个sheet的详细介绍。
sheet_file表记录的是每个sheet的每一行数据,因此数据量会较大。
【案例】--EasyExcel解析文件案例_第2张图片
【案例】--EasyExcel解析文件案例_第3张图片

2.3、解析格式规则的excel文件

一般是定义一个Bean对象,通过@ExcelProperty(value = “名称”,index = 0)来解析识别对应列。

这里定义一个Bean对象,来对照具体的Excel文件的列

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ExcelImportVo implements Serializable {
   
    private static final long serialVersionUID = -3029432587804941376L;
    @ExcelProperty(value = "名称",index = 0)
    private String name;
    @ExcelProperty(value = "手机号",index = 1)
    private String phone;
    @ExcelProperty(value = "公司",index = 2)
    private String corporation;
}

/**
 * 默认某个sheet,一行行的读取excel
 */
@Slf4j
public class EasyReadListener implements ReadListener<ExcelImportVo> {
   

    public EasyReadListener(){
   }
    @Override
    public void invokeHead(Map<Integer, ReadCellData<?>

你可能感兴趣的:(Java,java)