easyExcel导出解决Can not find ‘Converter‘ support class LoaclDate

在使用easyexcel进行表格导出的时候出现错误:

com.alibaba.excel.exception.ExcelDataConvertException: Can not find ‘Converter’ support class LocalDate.

在springboot项目中使用使用easyexcel,默认是支持Date日期格式的导出的,但是不支持LocalDate日期格式所以需要用到自定义转换器

1.导入依赖

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

2.自定义转换器类

package com.mju.library.utils;


import cn.hutool.core.date.DateUtil;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.converters.ReadConverterContext;
import com.alibaba.excel.converters.WriteConverterContext;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.CellData;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * 自定义LocalDateStringConverter
 * 用于解决使用easyexcel导出表格时候,默认不支持LocalDateTime日期格式
 *
 * 在需要的属性上添加注解 @ExcelProperty(value = "创建日期", converter = LocalDateStringConverter.class)
 */

public class LocalDateStringConverter implements Converter<LocalDate> {
    @Override
    public Class supportJavaTypeKey() {
        return LocalDateTime.class;
    }



    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    @Override
    public WriteCellData<?> convertToExcelData(LocalDate localDate, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        WriteCellData cellData = new WriteCellData();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd ");
        String cellValue;
        cellValue=formatter.format(localDate);
        cellData.setType(CellDataTypeEnum.STRING);
        cellData.setStringValue(cellValue);
        cellData.setData(cellValue);
        return cellData;
    }
}

3.在对应的localDate日期格式添加注解:

//@DateTimeFormat("yyyy-MM-dd") //导入阿里巴巴的包,适用于date格式日期,自定义日期的格式
    @ExcelProperty(value = "创建时间",converter = LocalDateStringConverter.class)

//    @ExcelIgnore
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private LocalDate createtime;

4.启动服务

   @GetMapping("/batchExport")
    public void batchExport(HttpServletResponse response) throws IOException {
        List<ReturnBook> list = returnBookService.findAll();
        //代表的时Excel文件类型
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-disposition", "attachment;filename=returnBook.xlsx");
        // 这里需要设置不关闭流
        OutputStream outputStream = response.getOutputStream();
        EasyExcel.write(outputStream)
                .excelType(ExcelTypeEnum.XLSX)
                //设置表面
                .sheet("图书列表")
                //实体类一一对应的列名
                .head(ReturnBook.class)
                .doWrite(list);
        outputStream.flush();
        outputStream.close();
    }

在这里插入图片描述

好的,下面是关于使用Alibaba Easy Excel进行导入导出的基本步骤: 1. 添加Easy Excel的依赖 在pom.xml文件中添加Easy Excel的依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.10</version> </dependency> ``` 2. 编写实体类 编写需要导入导出的实体类,其中可以使用@ExcelProperty注解指定对应Excel中的列名: ```java public class User { @ExcelProperty(value = "ID", index = 0) private Long id; @ExcelProperty(value = "姓名", index = 1) private String name; @ExcelProperty(value = "年龄", index = 2) private Integer age; // getter和setter方法 } ``` 3. 编写导出代码 通过Easy Excel提供的ExcelWriter类将数据写入到Excel中: ```java public void export(HttpServletResponse response) throws IOException { List<User> userList = new ArrayList<>(); // TODO: 从数据库或其他数据源获取需要导出的数据列表 String fileName = "user.xlsx"; String sheetName = "用户列表"; response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8")); ServletOutputStream outputStream = response.getOutputStream(); ExcelWriter writer = EasyExcel.write(outputStream, User.class).sheet(sheetName).build(); writer.write(userList, EasyExcel.writerSheet(sheetName).head(User.class).build()); writer.finish(); outputStream.flush(); } ``` 4. 编写导入代码 通过Easy Excel提供的ExcelReader类将Excel中的数据读取到指定的实体类中: ```java public void importData(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); ExcelReader reader = EasyExcel.read(inputStream).build(); List<User> userList = reader.readAll(User.class, EasyExcel.readSheet().build()); reader.finish(); // TODO: 将导入的数据列表存储到数据库或其他数据源 } ``` 以上就是使用Alibaba Easy Excel进行导入导出的基本步骤,您可以根据实际需求进行修改和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值