【问题标题】:Apache POI. Using row.getLastCellNum() to retrieve number of non blank cells阿帕奇 POI。使用 row.getLastCellNum() 检索非空白单元格的数量
【发布时间】:2017-09-05 07:29:33
【问题描述】:

我正在尝试连续获取非空白数量的单元格。

| 1  | 2  | 3 |  |  |  |
| 55 | 33 |   |  |  |  |

(int) row.getLastCellNum();

但是对于这两行,我得到的 int 大于工作表中实际具有值的单元格的数量。这可能是什么原因?单元格格式和/或样式可以在某种程度上负责吗?

我还注意到,如果我从 excel 工作表中删除值(手动,而不是从代码中),poi 仍将它们视为非空白(null?)并将它们包括在总数中。

UPD:经过更多研究,我发现如果我向单元格添加值然后删除它,那么 POI 仍然认为它是非空的。有什么方法可以在不删除整行/列的情况下正确清除excel表格中的单元格内容?

【问题讨论】:

  • read the Apache POI docs on iterating over rows and cells,尤其是空白单元格和空单元格上的位吗?
  • 是的,我有。虽然关于空白与空单元格的解释在那里非常模糊(至少对我来说是这样),但问题就来了。
  • 它只是反映了 Excel 文件格式的工作方式!从未使用过空单元格或设置样式。空白单元格可能有样式、格式、边框等,或者可能已经习惯了,Excel 只是懒得稍后删除它们......
  • 是的,我现在可以看到了。感谢@Gagravarr 的解释

标签: java excel apache apache-poi


【解决方案1】:

现在我已经这样解决了:

Iterator<Cell> cells = row.cellIterator();
                while (cells.hasNext()) {
                    if (formatCellToString(cells.next()).equals("")) {
                        lastCellNumber = lastCellNumber - 1;
                    }
                }

如果有人有更好的解决方案,那就太好了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    相关资源
    最近更新 更多