EasyExcel导入多个sheet页码,将数据存储到数据库

控制层

 @PostMapping("test/excel/import")
    public void modelImport(MultipartFile serviceFile) throws IOException {
        //输入流
        InputStream inputStream = serviceFile.getInputStream();
        //监视器
        ExcelListener listener = new ExcelListener();
        ExcelReader excelReader = EasyExcel.read(inputStream, listener).build();
        // 第一个sheet读取类型
        ReadSheet readSheet1 = EasyExcel.readSheet(0).head(DictEeVo.class).build();
        // 第二个sheet读取类型
        ReadSheet readSheet2 = EasyExcel.readSheet(1).head(ExpertVo.class).build();
        // 开始读取第一个sheet
        excelReader.read(readSheet1);
        //excel sheet0 信息
        List<Object> list = listener.getDatas();
        //List<object> 转 List<实体类>
        List<Dict> dtoList = new ArrayList<>();
        //List object for 转换 实体类
        for (Object objects : list) {
            DictEeVo dto = (DictEeVo) objects;
            Dict dict = new Dict();
            BeanUtil.copyProperties(dto,dict);
            dtoList.add(dict);
        }
        //List 转JOSN
        String json = JSON.toJSONString(dtoList);
        System.out.println("json = " + json);
        //保存第一个sheet页中的数据
        dictService.saveBatch(dtoList);
        // 清空之前的数据
        listener.getDatas().clear();

        // 开始读取第二个sheet
        excelReader.read(readSheet2);
        //excel sheet1 信息
        List<Object> entry = listener.getDatas();
        //copy上面作法

        //List<object> 转 List<实体类>
        List<Dict> dtoList22 = new ArrayList<>();
        //List object for 转换 实体类
        List<Dict> dtoList1 = new ArrayList<>();
        //List object for 转换 实体类
        for (Object objects : list) {
            ExpertVo dto = (ExpertVo) objects;
            Dict dict = new Dict();
            BeanUtil.copyProperties(dto,dict);
            dtoList1.add(dict);
        }


        //保存第二个sheet页中的数据
        dictService.saveBatch(dtoList1);
        //List 转JOSN
        String json1 = JSON.toJSONString(dtoList);
        System.out.println("json2222 = " + json1);

    }

业务层

万能监听器

package com.atguigu.yygh.cmn.listener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;

import java.util.ArrayList;
import java.util.List;

/**
 * excel表格读取监视器
 */
public class ExcelListener extends AnalysisEventListener {
    //可以通过实例获取该值
    private List<Object> datas = new ArrayList<Object>();

    public void invoke(Object o, AnalysisContext analysisContext) {
        datas.add(o);
        doSomething(o);
    }

    private void doSomething(Object object) {
    }

    public List<Object> getDatas() {
        return datas;
    }

    public void setDatas(List<Object> datas) {
        this.datas = datas;
    }

    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
    }
}

javabean

package com.atguigu.yygh.vo.cmn;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import lombok.Data;

import java.util.Date;

/**
 * <p>
 * Dict
 * </p>
 *
 * @author qy
 */
@Data
public class ExpertVo {

	@ExcelProperty(value = "id")
	@ExcelIgnore
	private Long id;

	@ExcelProperty(value = "名称")
	private String name;

	@ExcelProperty(value = "日期")
	private Date date;

}

 

postman

excel中的数据结构

 

 

 

数据库结果

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: EasyExcel 支持导入多个 sheet。可以通过 Workbook 接口中的读取方法实现。例如,以下代码将多个 sheet 导入EasyExcel 中: ```java Workbook workbook = EasyExcel.read(fileName).build(); for (Sheet sheet : workbook) { // do something } ``` 然后,您可以在循环中对每个 sheet 进行操作,例如读取数据、获取 sheet 名称等。 ### 回答2: EasyExcel是一种基于POI封装而成的简单易用的Excel操作工具,它可以轻松地实现Excel的创建、读取、修改和导出等功能。对于一个Excel文件包含多个Sheet数据的情况,如何使用EasyExcel实现导入呢? 首先需要在项目中加入EasyExcel的依赖,可以使用Maven的方式引入EasyExcel相关依赖包。 其次需要定义实体类,用于映射Excel文件中的数据。一般情况下,每个Sheet对应一个实体类,可以根据需要自行定义。需要注意的是,实体类中的字段名称要与Excel文件中的表头名称相对应。 然后需要编写导入Excel文件的代码。EasyExcel提供了多种导入方式,其中最常用的就是读取Excel文件中的每个Sheet数据并将其转换为对应的实体类对象。代码如下: ```java String filename = "demo.xlsx"; // 读取Excel文件中的所有Sheet数据 List<Map<Integer, String>> dataList = EasyExcelUtil.readExcel(filename); // 遍历Sheet列表,将每个Sheet数据转换为对应的实体类对象 for (Map<Integer, String> sheetData : dataList) { List<MyEntity> entityList = new ArrayList<>(); for (Map.Entry<Integer, String> entry : sheetData.entrySet()) { // 根据表头名称获取对应的字段名称 String fieldName = getFieldNameByHeaderName(entry.getValue()); // 根据字段名称获取对应的字段值 Object fieldValue = getFieldValueByString(entry.getKey(), entry.getValue()); // 将字段值赋给实体类对象 PropertyUtils.setProperty(myEntity, fieldName, fieldValue); } // 将实体类对象添加到列表中 entityList.add(myEntity); } // 将实体类对象列表保存到数据库中 myService.saveDataList(entityList); ``` 其中,`EasyExcelUtil.readExcel()`方法用于读取Excel文件中的所有Sheet数据,返回值是一个包含所有Sheet数据的列表。遍历Sheet列表后,将每个Sheet中的数据转换为对应的实体类对象存储到列表中,最后将列表中的实体类对象保存到数据库中即可。 总之,EasyExcel导入多个Sheet数据的方法是读取Excel文件中的所有Sheet数据并将其转换为对应的实体类对象,最后保存到数据库中即可。其代码实现简单,易于扩展,是一种非常实用的方式。 ### 回答3: EasyExcel是SpringBoot项目中的一个Excel操作工具,它能够帮助我们方便地读取和写入Excel文件。在实际的开发中,我们常常需要将一个Excel文件中的多个Sheet导入数据库中,EasyExcel提供了非常方便的解决方案。 EasyExcel提供了多种导入Sheet的方式,其中包括使用注解和不使用注解两种方式。下面我们将以使用注解的方式为例,介绍如何实现导入多个Sheet。 首先,我们需要在实体类上使用注解来说明我们要导入哪些Sheet,以及Sheet中每列的数据类型等信息。例如,假设我们要导入Excel文件中的两个Sheet,分别为“用户信息”和“订单信息”,我们需要定义两个实体类如下: ```java @ExcelSheet(name = "用户信息") public class User { @ExcelProperty("姓名") private String name; @ExcelProperty("年龄") private Integer age; // 省略getter/setter方法 } @ExcelSheet(name = "订单信息") public class Order { @ExcelProperty("订单号") private String orderNumber; @ExcelProperty("金额") private Float amount; // 省略getter/setter方法 } ``` 在上面的代码中,我们使用了@ExcelSheet和@ExcelProperty两个注解来定义Sheet和每列的信息。其中@ExcelSheet注解用于定义Sheet的名称,@ExcelProperty注解用于定义每列的标题名称。 接下来,我们需要编写一个导入Excel文件的方法,具体代码如下: ```java @RestController public class ExcelImportController { @PostMapping("/import") public void importExcel(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); ExcelReader excelReader = EasyExcel.read(inputStream).build(); List<Object> users = excelReader.read(new Sheet(0, 1, User.class)); List<Object> orders = excelReader.read(new Sheet(1, 1, Order.class)); excelReader.finish(); // 进行数据库插入操作 } } ``` 在上面的代码中,我们首先通过MultipartFile获取Excel文件的输入流。然后使用EasyExcel的ExcelReader类来读取Excel文件。我们需要调用excelReader.read方法来获取每个Sheet数据,读取数据时需要指定Sheet的索引和从第几行开始读取数据。最后我们需要记得调用excelReader.finish方法来关闭Excel文件的输入流。 除了使用@ExcelSheet和@ExcelProperty注解定义实体类外,我们还可以不使用注解的方式进行导入。具体代码如下: ```java @RestController public class ExcelImportController { @PostMapping("/import") public void importExcel(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); ExcelReader excelReader = EasyExcel.read(inputStream).build(); List<User> users = excelReader.read(new Sheet(0, 1, User.class)); List<Order> orders = excelReader.read(new Sheet(1, 1, Order.class)); excelReader.finish(); // 进行数据库插入操作 } } ``` 以上就是使用EasyExcel导入多个Sheet的方式。实现起来非常简单,只需要使用注解或者不使用注解的方式定义实体类即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值