【EasyExcel 单个多个sheet文件导入导出,通用超简单】

EasyExcel 单个多个sheet文件导入导出,通用超简单
废话少说,直接上代码:

1、pom依赖引入

        <!--alibaba-easyexcel-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.1.0</version>
        </dependency>

2、Controller,web请求代码示例如下:


    /**
    * 导入excel文件
    **/
    @PostMapping("/import")
    public R importExcel(@RequestParam("file") MultipartFile multipartFile) throws IOException {
        // 读取文件开始
        List<DataListener> listData=new ArrayList<>();

        DataListener sheetListener1 = new DataListener<Ttt>(Ttt.class, "sheet1");
        DataListener sheetListener2 = new DataListener<Ttt>(Ttt.class,"sheet2");
        listData.add(sheetListener1);
        listData.add(sheetListener2);

        ExcelUtil.readExcel(multipartFile.getInputStream(),listData);


        listData.forEach(listDataInfo->{
            //将每个sheet对应的list入库,写自己的业务逻辑
            tttService.saveBatch(listDataInfo.list);
        });

        return R.ok();

    }

    /**
    * 导出excel文件
    **/
    @GetMapping("/export")
    public void exportExcel(HttpServletResponse response , TttVO vo) throws IOException {
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码
        String encodedFileName = URLEncoder.encode(System.currentTimeMillis() + "", StandardCharsets.UTF_8.name()).replaceAll("\\+", "%20");
        response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename*=utf-8''" + encodedFileName + ".xlsx");

			//自己的业务数据列表
            List<Ttt> data1 = tttService.getAllTtts();
            List<Ttt> data2 = tttService.getAllTtts();

            //将数据写入sheet页中
            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build();
            WriteSheet writeSheet1 = EasyExcel.writerSheet(0, "sheet1").head(Ttt.class).build();
            WriteSheet writeSheet2 = EasyExcel.writerSheet(1, "sheet2").head(Ttt.class).build();

            excelWriter.write(data1, writeSheet1);
            excelWriter.write(data2, writeSheet2);

            excelWriter.finish();
            response.flushBuffer();
        System.out.println("多sheetExcel导出成功");

    }

3、导入导出实体类


import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.baomidou.mybatisplus.annotation.TableName;
import java.math.BigDecimal;
import io.swagger.annotations.*;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;
import java.lang.*;

/**
 * @author xmg
 * @date 2022年 05月15日 17:22:47
 */
 
@Data
@TableName("ttt")
public class Ttt{

    /**
     * 主键
     */
    @ExcelProperty(value = "主键")
    @ExcelIgnore
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

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

    /**
     * 年龄
     */
    @ExcelProperty(value = "年龄")
    private Integer age;

    /**
     * 描述
     */
    @ExcelProperty(value = "描述")
    @ColumnWidth(20)
    private String dsc;

}

4、导入两个相关类:


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

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

/**
 * @author xmg
 * @date 2022年 05月15日 17:22:47
 */
public class DataListener<T> extends AnalysisEventListener<T> {

    //存放头的Key
    private static final String HEAD="head";

    public DataListener(Class clazz,String sheetName){
        this.classa=clazz;
        this.sheetName=sheetName;
        this.sheetHead=sheetName+HEAD;
    }
   public List<T> list= new ArrayList<>();
    public String sheetName;
   public   Class classa;

   public Map<Integer, String> headMap;

   public String sheetHead;


    /**
     * 获取到表头
     * @param headMap
     * @param context
     */
   @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
      this.headMap=headMap;
    }
    @Override
    public void invoke(T t, AnalysisContext analysisContext) {
        list.add(t);

    }

    /**
     * 所有数据解析完成了 都会来调用
     * @param analysisContext
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

    }
}

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.read.metadata.ReadSheet;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * @author xmg
 * @date 2022年 05月15日 17:22:47
 */
public class ExcelUtil {
    public static void readExcel(InputStream inputStream, List<DataListener> listData) {

/*
  List<MemberExcelData> list = EasyExcel.read(inputStream).sheet().head(MemberExcelData.class).doReadSync();
            System.out.println(list);
* */



        ExcelReader excelReader = EasyExcel.read(inputStream).build();
        List<ReadSheet> listReadSheet=new ArrayList<>();
        for (int i = 0; i < listData.size(); i++) {
            ReadSheet readSheet1 = EasyExcel.readSheet(listData.get(i).sheetName).head(listData.get(i).classa).registerReadListener(listData.get(i)).build();
            listReadSheet.add(readSheet1);
        }


    /*    DataListener dataListener1=  new DataListener<MemberExcelData>();

        ReadSheet readSheet1 = EasyExcel.readSheet(0).head(MemberExcelData.class).registerReadListener(dataListener1).build();

        DataListener dataListener2=  new DataListener<MemberExcelData>();
        ReadSheet readSheet2 =
                EasyExcel.readSheet(1).head(MemberExcelData.class).registerReadListener(dataListener2).build();
        excelReader.read(readSheet1, readSheet2);
        List<MemberExcelData> list1= dataListener1.list;
        System.out.println(list1);
        List<MemberExcelData> list2= dataListener2.list;
        System.out.println(list2);*/
        excelReader.read(listReadSheet);

        excelReader.finish();



    /*  List<MemberExcelData>  list1= CsvUtil.getCsvData(inputStream,MemberExcelData.class);
        System.out.println(list1);*/
    }

5、导出相关:导入easyExcel相关类即可

6、演示导出文件,我这里sheet1和sheet2内容相同(主键id忽略了)。
在这里插入图片描述
7、将导出的excel文件,导入到项目的表中,导入成功后记录

在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值