使用Apache POI计算Excel文件中的非空行

Đin*_*hâu 7 java apache excel apache-poi

Apache POI 是否为我们提供了任何函数来计算 Excel 文件工作表中“非空”行的数量?
第一次,我有一个包含 10 个数据行的 Excel 工作表,函数 worksheet.getPhysicalNumberOfRows() 返回确切的数字 (10)。但在那之后,我删除了 3 行,然后该函数仍然得到 10 行。也许总行数被 POI 缓存在任何地方。getPhysicalNumberOfRows() 是什么意思?正如其 API 所描述的:“返回物理定义的行数(不是工作表中的行数)”,但我不明白“物理定义”是什么意思。你能帮我解决这个问题吗?
非常感谢!

Wol*_*ehn 3

如果通过 worksheet.removeRow(Row row) 删除行,则物理行数应为 7。

POI 使用地图来存储工作表的行。这张地图是物理部分。请参阅http://www.google.com/codesearch/p?hl=de#WXzbfAF-tQc/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java

对于逻辑空行,尝试

int notNullCount = 0;
Sheet sheet = wb.getSheetAt(0);
for (Row row : sheet) {
    for (Cell cell : row) {
        if (cell.getCellType() != Cell.CELL_TYPE_BLANK) {
            if (cell.getCellType() != Cell.CELL_TYPE_STRING ||
                cell.getStringCellValue().length > 0) {
                notNullCount++;
                break;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)