EasyExcel 2.x Long超出范围
时间: 2024-06-13 11:09:24 浏览: 136
EasyExcel 2.x中,当读取Excel文件中的Long类型数据超出范围时,会抛出`com.alibaba.excel.exception.ExcelDataConvertException`异常。这是因为Java中的Long类型数据范围是-2^63到2^63-1,如果Excel文件中的数据超出了这个范围,就会抛出该异常。
以下是处理该异常的示例代码:
```java
public class ExcelListener extends AnalysisEventListener<DemoData> {
private static final Logger LOGGER = LoggerFactory.getLogger(ExcelListener.class);
private static final int BATCH_COUNT = 5;
List<DemoData> list = new ArrayList<>();
/**
* 每解析一行会回调invoke()方法。
* @param data
* @param context
*/
@Override
public void invoke(DemoData data, AnalysisContext context) {
LOGGER.info("解析到一条数据:{}", JSON.toJSONString(data));
list.add(data);
if (list.size() >= BATCH_COUNT) {
saveData();
list.clear();
}
}
/**
* 所有数据解析完成会回调invokeHeadMap()方法。
* @param headMap
* @param context
*/
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
LOGGER.info("解析到一条头数据:{}", JSON.toJSONString(headMap));
}
/**
* 解析异常会回调该方法。
* @param exception
* @param context
* @throws Exception
*/
@Override
public void onException(Exception exception, AnalysisContext context) throws Exception {
LOGGER.error("解析失败,但是继续解析下一行:{}", exception.getMessage());
if (exception instanceof ExcelDataConvertException) {
ExcelDataConvertException excelDataConvertException = (ExcelDataConvertException) exception;
LOGGER.error("第{}行,第{}列解析异常,数据为:{}", excelDataConvertException.getRowIndex(),
excelDataConvertException.getColumnIndex(), excelDataConvertException.getCellData());
}
}
/**
* 所有数据解析完成会回调该方法。
* @param context
*/
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
saveData();
LOGGER.info("所有数据解析完成!");
}
private void saveData() {
LOGGER.info("{}条数据,开始存储数据库!", list.size());
LOGGER.info("存储数据库成功!");
}
}
```
在上述代码中,`onException()`方法会在解析异常时被回调,如果异常是`ExcelDataConvertException`类型,就说明是Long类型数据超出范围的异常,可以通过该异常对象获取到出错的行数、列数和数据内容。
阅读全文