EasyExcel的上传与导出

本文详细介绍了如何使用EasyExcel进行Excel数据的导入与导出。首先,通过添加EasyExcel依赖,然后创建实体类和监听器来实现数据的导入,最后展示读取数据的完整代码及测试结果。在数据导出部分,定义了实体类并展示了导出到模板以及不使用模板的代码实现,导出过程清晰明了。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EasyExcel的上传与导出

1.导入依赖

<!-- easy Excel -->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>easyexcel</artifactId>
	<version>2.2.6</version>
</dependency>

2.导入数据使用示例

首先准备导入的Excel文件
在这里插入图片描述

导入数据需要准备两个东西:
1.监听器
2.封装每格数据的实体类

1.封装表格每行数据的实体类

/**
 * 封装数据的实体类
 */
public class StatementExcel {
	//这个注解指定字段在表格中的位置
    @ExcelProperty(index = 0)
    private String sn;//单号
    @ExcelProperty(index = 1)
    private String during;//期间
    @ExcelProperty(index = 2)
    private Integer num;//数量
   @ExcelProperty(index = 3)
    private BigDecimal amount;//金额
    }

2.监听器

package com.grgbanking.shopMmg.listener;


import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.grgbanking.shopMmg.excel.StatementExcel;

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

/**
 * 读取数据的监听器
 */
public class ExcelListener extends AnalysisEventListener<StatementExcel> {

    /**全部的实体类*/
    private final List<StatementExcel> allList = new ArrayList<>();

    /**
     * 这个方法每读取一行数据执行一次
     * @param statementExcel 封装读取到的每一行数据
     * @param analysisContext
     */
    @Override
    public void invoke(StatementExcel statementExcel, AnalysisContext analysisContext) {
        //将读取到的数据添加到集合
        allList.add(statementExcel);
    }

    /**
     * 读取完表格数据后执行的方法
     * @param analysisContext
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        //输出读取到的数据
        System.out.println("从excel中读取到的数据:");
        for (StatementExcel statementExcel : allList) {
            System.out.println(statementExcel);
        }
    }

	/** 
	 * 如果想拿出来读取的数据可以自己写个方法
     * 获取读取到的数据
     */
    public List<StatementExcel> getList(){
        return this.allList;
    }
}

3.读取准备完毕开始读取数据

	@Test
    public void testExcel() throws Exception {
        //1.获得传入文件的输入在这里插入代码片流
        File file = new File("C:\\Users\\User\\Desktop\\category.xlsx");
        InputStream inputStream = new FileInputStream(file);
        //2.创建监听器
        ExcelListener excelListener = new ExcelListener();
        //3.读取传入的excel文件
        EasyExcel.read(inputStream, StatementExcel.class,excelListener).sheet().doRead();
        //读取的全部内容
        List<StatementExcel> list = excelListener.getList();
        //输出读取到的数据
        System.out.println("从excel中读取到的数据:");
        for (StatementExcel statementExcel : list) {
            System.out.println(statementExcel);
        }
    }

4.执行测试结果

在这里插入图片描述

2.数据Excel导出

1.指定导出的模板(也可以不指定)

{.字段名}

在这里插入图片描述

2.也需要指定实体类封装数据
/**
 * 对账单导出数据封装类
 */
public class StatementExcel {
	//指定导出位置
    @ExcelProperty({"单号"})
    private String sn;//单号
    @ExcelProperty({"期间"})
    private String during;//结算期间
    @ExcelProperty({"数量"})
    private Integer reconciliationNum;//数量
    @ExcelProperty({"金额"})
    private BigDecimal amount;//金额
    }
3.导出代码
@GetMapping("/export")
    public void exportStatement(HttpServletResponse response) throws Exception {
        //1.查询数据库中的数据
        Result<PageData<StatementVO>> pageDataResult = adminFindStatementByPage(new StatementSearchDto());
        List<StatementVO> row = pageDataResult.getData().getRow();
        List<StatementExcel> excels = new ArrayList<>();
        for (StatementVO statementVO : row) {
            StatementExcel statementExcel = BeanHelper.copyProperties(statementVO, StatementExcel.class);
            excels.add(statementExcel);
        }
        //2.读取表格模板
        File file = new File("F:\\exportStaTemplate.xlsx");
        FileInputStream inputStream = new FileInputStream(file);
        //3.防止文件名乱码
        String fileNameEncode = URLEncoder.encode("category", "UTF-8");
        //3.设置响应为excel表格文件
        response.setHeader("content-disposition","attachment;filename=" + fileNameEncode + ".xlsx");
        response.setContentType("multipart/form-data");
        response.setCharacterEncoding("utf-8");
        //4.使用模板导出
        EasyExcel.write(response.getOutputStream(), StatementExcel.class).withTemplate(inputStream).sheet("1").doFill(excels);
        //5.不适用模板导出
        //EasyExcel.write(response.getOutputStream(), StatementExcel.class).sheet(1).doWrite(excels);
    }
4.导出结果

在这里插入图片描述

有帮助请点赞!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值