使用easyexcel导入和导出

使用easyexcel需要的pom依赖
<properties>
        <easyexcel.version>2.2.0-beta2</easyexcel.version>
</properties>

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>${easyexcel.version}</version>
</dependency>

导入

controller层

//    需要使用post请求
//    参数是MultipartFile类型
//    ApiOperation是swagger测试使用的
    @PostMapping("/importData")
    @ApiOperation(value = "导入",notes = "测试")
    public String importData(MultipartFile file) throws IOException {
        dictService.importData(file);
        return "success";
    }

service层

//    导入监听器
    @Resource
    private ExcelListener excelListener;
 @Override
    public void importData(MultipartFile file) {
//        EasyExcel.read   导入方法   
//        参数1:文件的序列化。
//        参数2:DictEeVo(和表格中字段对应的实体类)
//        参数3:excelListener监听器,在此监听器中可以做导入表格时候所做的事情
        try {
            EasyExcel.read(file.getInputStream(), DictEeVo.class,excelListener).sheet().doRead();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
表格示例

实体类定义

@Data
public class DictEeVo {

	@ExcelProperty(value = "id" ,index = 0)
//	@ApiModelProperty(value = "id")
	private Long id;

	@ExcelProperty(value = "上级id" ,index = 1)
	private Long parentId;

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

	@ExcelProperty(value = "值" ,index = 3)
	private String value;

	@ExcelProperty(value = "编码" ,index = 4)
	private String dictCode;


}

实体类和表格中字段需要时一一对应的关系

监听器:需要继承AnalysisEventListener类,泛型是你的实体类

@Configuration
public class ExcelListener extends AnalysisEventListener<DictEeVo> {
//    注入service层
    @Resource
    private DictService dictService;
//    上传之前所做的事情在这个方法里面
    @Override
    public void invoke(DictEeVo dictEeVo, AnalysisContext analysisContext) {
//        dictEeVo这个就是你的表格中的数据,就会一行一行的进行输入,此时可以直接操作数据库添加
        Dict dict = new Dict();
//         BeanUtils.copyProperties(dictEeVo,dict);
//         此方法是一般进行数据库添加的时候会出现数据库字段不一致的情况,这样的情况下可以使用这个BeanUtils工具类进行转换
        BeanUtils.copyProperties(dictEeVo,dict);
        dict.setIsDeleted(0);
//        mybatis-plus中的方法saveOrUpdate,如果此id的信息存在就进行修改,不存在则进行添加
        dictService.saveOrUpdate(dict);
    }
//  上传之后所做的事情在这个方法里面
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

    }
}

此时,就做好了导入

导出

controller

//    直接get请求
//    参数是HttpServletResponse
    @GetMapping("/exportData")
    @ApiOperation(value = "导出",notes = "测试")
    public void getAllCmd(HttpServletResponse httpResponse){
        dictService.exportData(httpResponse);
    }

service

 @Override
    public void exportData(HttpServletResponse response) {
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        String fileName = null;
        try {
            fileName = URLEncoder.encode("公共", "UTF-8").replaceAll("\\+", "%20");
            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
//            查询出所有的数据
            List<Dict> dicts = dictMapper.selectList(null);
//            这里使用的导出的类和数据库中的类不一样
//           需要使用 BeanUtils.copyProperties进行转换
            List<DictEeVo> dictEeVoList = new ArrayList<>();
            for (Dict dict : dicts) {
                DictEeVo dictEeVo = new DictEeVo();
                BeanUtils.copyProperties(dict,dictEeVo);
                dictEeVoList.add(dictEeVo);
            }
//            这里直接调用方法进行导出
//            参数controller传入response和实体类和名字和需要导出的集合
            EasyExcel.write(response.getOutputStream(), DictEeVo.class).sheet("公共").doWrite(dictEeVoList);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

service这个方法可以直接进入官网文档进行粘贴使用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值