文章18 | 阅读 21385 | 点赞0
相关类与接口
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异常后,立即停止,不会继续解析
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_43931625/article/details/107567333
内容来源于网络,如有侵权,请联系作者删除!