You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中使用org.jxls读取Excel时如何处理空单元格?

解决jXLS读取Excel时空单元格抛出XLSDataReadException的问题

问题分析

你当前配置的IsEmptyCellCheck是jXLS默认的空单元格检查器,它的作用是当单元格为空时主动抛出异常,所以这个配置不仅没解决问题,反而会触发你想避免的错误。

解决方案

1. 自定义空单元格检查器(推荐)

实现自定义的CellCheckEvaluator,让空单元格的检查通过而不中断读取:

import org.jxls.common.CellData;
import org.jxls.common.cell.reader.CellCheckEvaluator;

public class IgnoreEmptyCellCheck implements CellCheckEvaluator {
    @Override
    public boolean evaluate(CellData cellData) {
        // 单元格为空时返回true,表示检查通过,继续读取后续内容
        return cellData == null 
            || cellData.getCellValue() == null 
            || cellData.getCellValue().toString().trim().isEmpty();
    }
}

然后在XML配置中替换原有的cellcheck:

<cellcheck offset="0" evaluator="com.osi.exceljxls.IgnoreEmptyCellCheck" />

2. 确保实体类字段支持空值

如果异常是因为空单元格映射到基本类型(如int)导致的类型转换错误,把实体类中的基本类型改成对应的包装类:

public class Estimation {
    private String role;
    // 将int改为Integer,支持null值映射
    private Integer noOfResources;
    private String projectLocation;
    // 其他字段...
}

3. 调整循环终止逻辑

你的loopbreakcondition是检查第一列单元格为空时终止循环,这个逻辑适合判断数据行结束,但要注意不要和普通空单元格检查混淆。如果需要跳过中间存在空白单元格的数据行,可以修改rowcheck的判断逻辑。

4. 捕获异常并继续读取

如果配置方式无法满足需求,可在读取代码中捕获XLSDataReadException,记录日志后继续执行:

import org.jxls.reader.XLSDataReadException;
import org.jxls.reader.XLSReader;
import org.jxls.reader.ReaderBuilder;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

// 读取逻辑示例
List<Estimation> estimations = new ArrayList<>();
Map<String, Object> beans = Map.of("estimations", estimations);
try (FileInputStream configStream = new FileInputStream("excel-config.xml");
     FileInputStream excelStream = new FileInputStream("data.xlsx")) {
    XLSReader reader = ReaderBuilder.buildFromXML(configStream);
    reader.read(excelStream, beans);
} catch (XLSDataReadException e) {
    // 记录异常,跳过当前行继续处理
    System.err.println("读取单元格遇到空值,跳过当前行: " + e.getMessage());
} catch (IOException e) {
    e.printStackTrace();
}

内容的提问来源于stack exchange,提问作者Abhishek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 18:23:16