您的当前位置:首页正文

Java使用easyExcel实现导入功能

2024-11-16 来源:个人技术集锦

今天带来的是esayExcel的简单使用小结,一个高效的Excel的处理框架

临时接到领导要求需要做一个Excel导入功能,于是发挥我的特长——面向百度编程。

在百度搜索了一圈都是POi导入方式,找到一个看着还算靠谱的demo,这种方式在我看来相当的笨重,读取到Excel内容后逐个进行判断。折腾了一个上午,代码像是一个年迈的老人-岿然不动,为我的菜感到汗颜。

经过公司经验丰富的老人的指导,使用阿里巴巴开源的easyExcel导入方式使用很便捷,更重要的是快,十分钟就完成了整个导入过程的开发。

书归正传,正式进入easyExcel的使用过程。

一、导入依赖

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>easyexcel</artifactId>
  <version>2.1.1</version>
</dependency>

二、编写entity类

public class MedicineBasicImport implements Serializable {

    /**
     * 药品编码
     */
    @ExcelProperty("药品编码")
    private String code;
    /**
     * 药品类型
     */
    @ExcelProperty( "药品类型")
    private String type;
     /**
     * 药品名称
     */
    @ExcelProperty("药品名称")
    private String title;

}

特别指出的是,实体属性上需要增加 @ExcelProperty注解与Excel的表头对应。

三、写操作

 @Override
    public int importBasicMedicine(MultipartFile file, Long updateSupport) {
        try {
            BufferedInputStream bufferedInputStream=new BufferedInputStream(file.getInputStream());
            EasyExcel.read(bufferedInputStream, MedicineBasicImport.class,new ImportMedicineService(updateSupport,medicineBasicMapper))
                .sheet()
                .doRead();;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return 0;
    }

调用 EasyExcel.read()方法,需要传递三个参数,1、文件流 2、实体类 3、new ImportMedicineService(updateSupport,medicineBasicMapper)处理的业务类

四、业务实现

ImportMedicineService需要我们继承 AnalysisEventListener类 并实现它的两个方法,invoke()和doAfterAllAnalysed()方法。

public class ImportMedicineService extends AnalysisEventListener<MedicineBasicImport> {
    private Long topDeptId;
    private TMedicineBasicMapper medicineBasicMapper;

    List<TMedicineBasic> list =  new ArrayList<>();

    public ImportMedicineService(Long updateSupport, TMedicineBasicMapper medicineBasicMapper) {
        topDeptId=updateSupport;
        this.medicineBasicMapper=medicineBasicMapper;
    }

    // 每读取一行就调用该方法
    @Override
    public void invoke(MedicineBasicImport data, AnalysisContext context) {

        TMedicineBasic tMedicineBasic=new TMedicineBasic();
        tMedicineBasic.setId(IdUtils.simpleUUID());
        tMedicineBasic.setTopDeptId(topDeptId);
        BeanUtils.copyProperties(data,tMedicineBasic);
        list.add(tMedicineBasic);
    }

    // 全部读取完成就调用该方法
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        medicineBasicMapper.insertList(list);
    }

当我们调用导入接口时会调用到 AnalysisEventListener 的实现类的invoke()方法,但是每读取一行都会执行invoke()方法,大部分业务场景都会把读取的内容存入到数据库中,如果读取一行就保存到数据库,这对于数据库来说简直是一个灾难。

比较好的方式就是在doAfterAllAnalysed()方法中执行数据库的操作,将多次数据库IO转为一次IO。

这种方式是不是比PIO要简单一些呢?

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接

个人技术集锦还为您提供以下相关内容希望对您有帮助:

Java+EasyExcel实现文件导入导出

使用EasyExcel作为工具,原因是它对POI进行了优化升级,提供更简洁、高效的API。项目中涉及的核心实体类和监听器类,通过实现EmployeeListener类,配合EasyExcel,实现在页面点击时导入文件,并将数据存入数据库。测试类EmployeeListenerTest展示了如何通过监听器完成文件导入并将其存入数据库的操作。进一步,Employee...

【Java导入导出系列】简单介绍一下EasyExcel的用法

以下是EasyExcel的使用步骤:1. 准备工作在项目中添加EasyExcel的依赖,导入数据实体类和所需的转换工具。2. 数据导出若要导出数据列表,首先获取查询结果,然后调用如下方法:参数:List数据(data)、对应的类(clazz)、输出流(outputStream)、页码(sheetNo)、页名称(sheetName)和WriteHandler。结果示...

Java读写Excel原来这么简单

首先,引入EasyExcel的库。导出数据时,有两种方式:一是无需创建对象直接写入,二是根据对象写入。不创建对象的写入通过简单的一行代码完成,如下所示:head()...dataList()...要设置列宽,可以使用特定方法调整。对象导入Excel同样简单,通过`doWrite`方法传入对象集合即可。若要忽略某些字段,使用`@Exce...

EasyExcel实现复杂数据的导入

作为技术博主shigen,他热衷于Java、Python、Vue、Shell等编程语言以及应用程序和脚本的开发,通过分享和记录,传递知识和经验。在数据处理中,导入操作看似简单,实则需要结合EasyExcel这样的工具,尤其在面对复杂业务场景时。在着手编码前,重要的是深入思考业务需求。例如,要考虑数据的格式、数据量的处理、错...

Java操作EasyExcel详解

在使用EasyExcel时,可以轻松实现简单写入Excel。首先,创建模板对象,然后插入所需值,调用开始写入方法,可以选择导出指定列,如排除日期时间列。写入时,支持两种格式:①使用index可能产生空列,②order格式则可避免空列。对于复杂头部,如插入单元格,也提供相应的操作。重复写入时,可以写入单个或多个Sheet...

【测试开发】知识点-使用EasyExcel,实现excel文件的读写操作

1. 实现读取逻辑 修改注解,加入字段在excel列的索引,创建监听器。2. 处理读取过程 监听器实现三个常用方法,处理Excel数据读取。3. 测试读取 使用EasyExcel的read方法读取Excel文件,验证监听器方法的正确性。五、整合项目 将读写操作整合到项目中,实现Excel数据的导入和导出功能。通过以上步骤,能够熟练...

easyexcel有什么用easyexcel使用说明

EasyExcel是一款Java开发的Excel操作工具,可以方便地进行Excel文件的读取、写入和操作。通过EasyExcel,我们可以将数据快速地写入到Excel中,也可以将Excel中的数据读取出来进行处理。EasyExcel支持大批量数据的读写,可以实现一次性读写大量数据,提高数据处理的效率。在实际应用中,EasyExcel可以用于数据导入导出...

一文带你彻底玩转EasyExcel:导入导出excel数据起飞

通过实例,我们展示了EasyExcel在16M内存下,23秒内读取75M Excel文件的高效性能。EasyExcel支持多种模式,如默认模式和极速模式,各有优缺点。导入数据时,只需确保Java对象属性和Excel列名一一对应,且顺序一致,EasyExcel会自动映射数据。EasyExcel的注解如@ExcelProperty和@ExcelIgnore提供了灵活的控制,@Excel...

一文搞定POI,再也不怕excel导入导出了

在Java开发中,处理Excel文件的导入导出是常见的需求,本文将简要介绍如何使用Apache POI、EasyPoi和EasyExcel这三个库进行操作。首先,了解其应用场景:企业管理系统、学校教务系统、电子商务平台、人力资源管理系统和医院信息系统等,都需要处理大量数据的导入导出,如员工信息、销售数据等。Apache POI是处理...

Java EasyExcel写入Excel中复杂头(head)表中的标题的方法及示例代码_百 ...

首先,我们需要明确一点,当数据在Excel中布局复杂时,如标题跨越多行,使用EasyExcel的默认方式直接写入数据可能会导致布局混乱。为了保持Excel文件的清晰美观,我们需要自定义读写过程。步骤一:定义头表结构 在写入数据前,我们需要定义头表结构,明确每一行数据的字段名与对应的数据类型。例如,假设我们有一...

显示全文

猜你还关注