java - 如何在 apache POI XSSF 中获取空白单元格值

标签 java apache-poi

我的 Apache POI XSSF 存在问题,因为它无法读取空白单元格值。

我有一个实现 DefaultHandler 的类。在该类中,所有非空白单元格都可以从 startElement 和 endElement 方法读取。

我想读取数据单元格中间的空白单元格。

任何人都可以提供如何执行此操作的示例或有关如何调试此问题的说明吗?

最佳答案

今天遇到了同样的问题。我正在使用 XSSF 事件模型。但 XSSF 不会为空白列提供列元素或值元素。很可能是因为支持 XML 就是这样。

关键是检查单元格引用的属性(你知道Excel使用的A1、A2、A3)。属性被传递到 startElement() 回调方法。然后我们可以检测丢失的单元格引用。因此,如果我们获得前一列元素的 L1 并获得当前列元素的 N1,我们就知道 M1 是空白/缺失单元格。

public void startElement(String uri, String localName, String qName,        Attributes atts) throws SAXException {
if (qName.equals("c")) {
    String newColRef = atts.getValue("r");
    coverColumnDistanceWithNulls(currentColRef, newColRef);

并且 coverColumnDistanceWithNulls() 只是为 currentColRef 和 newColRef 之间每个缺失的单元格引用添加空值

private void coverColumnDistanceWithNulls(String fromColRefString, String toColRefString) {
    int colRefDistance = getDistance(fromColRefString, toColRefString);
    while (colRefDistance > 1) {
        logger.debug("Covering distance with null");
        rowValues.add(null);
        --colRefDistance;
    }
}

private int getDistance(String fromColRefString, String toColRefString) {
    String fromColRef = getExcelCellRef(fromColRefString);
    String toColRef = getExcelCellRef(toColRefString);
    logger.debug("fromCol: {} toCol: {}", new Object[] {fromColRefString, toColRefString});
    return excelCellReferenceOrder.get(toColRef) - excelCellReferenceOrder.get(fromColRef);
}

private String getExcelCellRef(String fromColRef) {
    if (fromColRef != null) {
        int i = 0;
        for (;i < fromColRef.length(); i++) {
            if (Character.isDigit(fromColRef.charAt(i))) {
                break;
            }
        }
        if (i == 0) {
            return fromColRef;
        }
        else {
            return fromColRef.substring(0, i);
        }
    }
    return null;
}

关于java - 如何在 apache POI XSSF 中获取空白单元格值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10480030/

相关文章:

java - 安卓聊天客户端

Java 6 线程 - "implements Runnable"和 "extends Thread"的不同行为

java - MQTT - 订阅方法不起作用

apache-poi - 如何选择要在 Apache POI 中使用的自定义布局

Java 泛型命名约定

java - 需要编写一个 java 正则表达式,该表达式与 http 或 https 的 url 匹配,但不包含特定的文件扩展名

apache-poi - 使用 POI 在 Excel 中设置时间

java - 可执行 Jar : jorg. apache.xmlbeans.XmlOptions.setEntityExpansionLimit(I) org.apache.poi.ooxml.POIXMLTypeLoader.<clinit> 中的 Jar

java - 使用 XSSF SAX 读取并使用 SXSSF 流式输出数据 - POI

Java从Excel中读取数据