easyexcel 异常处理


easyexcel 异常处理

 

 

**********************

相关类与接口

 

AnalysisEventListener:异常在监听接口中处理

public abstract class AnalysisEventListener<T> implements ReadListener<T> {
    public AnalysisEventListener() {
    }

    public void invokeHead(Map<Integer, CellData> headMap, AnalysisContext context) {
        this.invokeHeadMap(ConverterUtils.convertToStringMap(headMap, context), context);
    }

    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
    }

    public void extra(CellExtra extra, AnalysisContext context) {
    }

    public void onException(Exception exception, AnalysisContext context) throws Exception {
        throw exception;
    }  //默认抛出异常

    public boolean hasNext(AnalysisContext context) {
        return true;
    }
}

 

ReadListener

public interface ReadListener<T> extends Listener {

    void invoke(T var1, AnalysisContext var2);
    void invokeHead(Map<Integer, CellData> var1, AnalysisContext var2);

    void doAfterAllAnalysed(AnalysisContext var1);

    void onException(Exception var1, AnalysisContext var2) throws Exception;  //异常处理

    void extra(CellExtra var1, AnalysisContext var2);
    boolean hasNext(AnalysisContext var1);
}

 

Listener

public interface Listener {
}

 

 

ExcelDataConvertException:数据转换异常错误

public class ExcelDataConvertException extends RuntimeException {

    private Integer rowIndex;
    private Integer columnIndex;

    private CellData cellData;
    private ExcelContentProperty excelContentProperty;

    public ExcelDataConvertException(Integer rowIndex, Integer columnIndex, CellData cellData,
    public ExcelDataConvertException(Integer rowIndex, Integer columnIndex, CellData cellData,


    public void setRowIndex(Integer rowIndex) {
    public void setColumnIndex(Integer columnIndex) {
    public void setCellData(CellData cellData) {
    public void setExcelContentProperty(ExcelContentProperty excelContentProperty) {

    public Integer getRowIndex() {
    public Integer getColumnIndex() {
    public CellData getCellData() {
    public ExcelContentProperty getExcelContentProperty() {

 

ExcelAnalysisStopException:onexception中抛出该异常后停止解析

public class ExcelAnalysisStopException extends ExcelAnalysisException {

    public ExcelAnalysisStopException() {}

    public ExcelAnalysisStopException(String message) {
        super(message);
    }

    public ExcelAnalysisStopException(String message, Throwable cause) {
        super(message, cause);
    }

    public ExcelAnalysisStopException(Throwable cause) {
        super(cause);
    }
}

 

 

**********************

示例

 

**************

head 类

 

Order

@Data
public class Order {

    private Integer id;

    @DateTimeFormat("yyyy-MM-dd HH:mm:ss")
    //@ExcelProperty(converter = CustomConverter.class)
    private LocalDateTime createTime;

    @DateTimeFormat("yyyy-MM-dd HH:mm:ss")
    //@ExcelProperty(converter = CustomConverter.class)
    private LocalDateTime payTime;

    @NumberFormat("##.00")
    private Double totalFee;
}

 

**************

监听器

 

CustomListener

public class CustomListener extends AnalysisEventListener<Order> {

    private final Logger logger= LoggerFactory.getLogger(CustomListener3.class.getName());

    @Override
    public void invoke(Order order, AnalysisContext context) {
        System.out.println(order);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        System.out.println("数据解析完成");
    }

    @Override
    public void onException(Exception exception, AnalysisContext context) throws Exception {
        logger.info("解析出错:"+exception.getMessage());

        int row=0,column=0;
        if (exception instanceof ExcelDataConvertException){
            ExcelDataConvertException convertException=(ExcelDataConvertException) exception;

            row=convertException.getRowIndex();
            column=convertException.getColumnIndex();
            logger.error("解析出错:{}行 {}列",row,column);
        }
    }
}

 

**************

测试类

 

Test

public class Test {

    private static final String file_path="e:"+ File.separator+"java"+File.separator+"easyexcel"+File.separator+"write_test6.xlsx";

    public static void main(String[] args){
        EasyExcel.read(file_path, Order.class,new CustomListener3()).sheet().doRead();
    }
}

 

 

**********************

使用测试

 

测试数据

                

 

控制台输出

10:32:44.226 [main] INFO com.example.demo.listener.CustomListener3 - 解析出错:Converter not found, convert STRING to java.time.LocalDateTime
10:32:44.226 [main] ERROR com.example.demo.listener.CustomListener3 - 解析出错:1行 1列
10:32:44.227 [main] INFO com.example.demo.listener.CustomListener3 - 解析出错:Converter not found, convert STRING to java.time.LocalDateTime
10:32:44.227 [main] ERROR com.example.demo.listener.CustomListener3 - 解析出错:2行 1列
数据解析完成

发生异常后,默认会继续解析后续数据

 

 

**********************

解析出现异常就停止

 

CustomListener

public class CustomListener3 extends AnalysisEventListener<Order> {

    private final Logger logger= LoggerFactory.getLogger(CustomListener3.class.getName());

    @Override
    public void invoke(Order order, AnalysisContext context) {
        System.out.println(order);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        System.out.println("数据解析完成");
    }

    @Override
    public void onException(Exception exception, AnalysisContext context) throws Exception {
        logger.info("解析出错:"+exception.getMessage());

        int row=0,column=0;
        if (exception instanceof ExcelDataConvertException){
            ExcelDataConvertException convertException=(ExcelDataConvertException) exception;

            row=convertException.getRowIndex();
            column=convertException.getColumnIndex();
            logger.error("解析出错:{}行 {}列",row,column);
        }

        throw new ExcelAnalysisStopException("解析出错:"+row+"行 "+column+"列,停止运行");
    }
}

 

**********************

使用测试

 

控制台输出

10:35:50.577 [main] INFO com.example.demo.listener.CustomListener3 - 解析出错:Converter not found, convert STRING to java.time.LocalDateTime
10:35:50.577 [main] ERROR com.example.demo.listener.CustomListener3 - 解析出错:1行 1列
10:35:50.577 [main] DEBUG com.alibaba.excel.analysis.ExcelAnalyserImpl - Custom stop!

抛出ExcelAnalysisStopException异常后,立即停止,不会继续解析

 

 

你可以使用EasyExcel提供的API读取Excel文件中的前十行数据,以下是示例代码: ```java // 导入需要的类 import com.alibaba.excel.EasyExcel; import com.alibaba.excel.read.builder.ExcelReaderBuilder; import com.alibaba.excel.read.listener.ReadListener; // 定义数据实体类 public class MyData { private String col1; private String col2; // ... 其他属性 // 定义属性的 getter 和 setter 方法 // ... } // 创建读取 Excel 的对象 ExcelReaderBuilder readerBuilder = EasyExcel.read("file.xlsx", MyData.class, new ReadListener<MyData>() { @Override public void onException(Exception exception) { // 在读取 Excel 文件时发生异常时调用 } @Override public void onReadError(Exception exception) { // 在读取 Excel 文件时发生错误时调用 } @Override public void onRead(List<MyData> dataList) { // 在读取每一行数据时调用,dataList 中包含当前行的数据 } }); // 读取前十行数据 readerBuilder.sheet().headRowNumber(0).doReadPage(1, 10); ``` 以上代码中,`MyData` 类是自定义的数据实体类,其中定义了 Excel 文件中每一行数据的属性。`ExcelReaderBuilder` 对象是 EasyExcel 提供的读取 Excel 文件的对象,可以通过它设置读取 Excel 文件的参数。`ReadListener` 接口中定义了读取 Excel 文件时的回调方法,可以在这些方法中处理读取 Excel 文件时的异常、错误和每一行数据。`headRowNumber(0)` 方法指定从第一行开始读取数据,`doReadPage(1, 10)` 方法则指定读取第一页(即前十行)数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值