【问题标题】:Detecting hidden cells in excel using apache poi使用apache poi检测excel中的隐藏单元格
【发布时间】:2012-05-10 08:09:54
【问题描述】:

我们正在使用 apache poi 3.8 来解析 Excel。我们需要能够检测(并跳过)隐藏行,因为它们在我们的用例中往往包含垃圾数据。

这看起来应该可行:

row.isFormatted() && row.getRowStyle().getHidden()

但似乎从来没有任何行级格式(getRowStyle() 总是返回 null)。作为最后的手段,我们认为检查单元格样式可能会起作用:

for (int i = 0; i < row.getLastCellNum(); i++) {
    Cell cell = row.getCell(i);
    if (cell != null && cell.getCellStyle() != null && cell.getCellStyle().getHidden())
        ...

但是对于我们得到的每一行(上面 for 循环中的自定义输出):

Cell 0 is not hidden org.apache.poi.hssf.usermodel.HSSFCellStyle@1b9142d0 / false

“getHidden()”是不起作用还是不像我认为的那样起作用?还有另一种检测隐藏行的方法吗? (隐藏的列也是一个不错的奖励,但相关性略低)

【问题讨论】:

    标签: java apache excel apache-poi


    【解决方案1】:

    getRowStyle 应该正常工作。

    否则,您可以检查行的高度,因为隐藏行的高度往往设置为 0。 使用row.getHeight()row.getZeroHeight()

    【讨论】:

    • 对于隐藏行,hidden 设置为true,但除非明确设置,否则row.getHeight() 始终返回可能不为零的默认工作表值。我们可以依靠row.getZeroHeight()
    • getZeroHeight() 适用于我现在面临的用例。因此,尽管“getRowStyle()”仍然无法正常工作,但我的问题已解决。我应该将您的回复标记为正确答案还是等到有人就 getRowStyle() 问题提供一些反馈? (我对 stackoverflow 比较陌生)
    • 通常行样式应该被 POI 正确加载,因此 getRowStyle().getHidden() 应该可以工作。或者我认为。我假设我们可以安全地依赖getZeroHeight()。对于正确的答案,我不知道。如你所愿
    【解决方案2】:

    在尝试了几种方法后,row.getZeroHeight() 可以正确识别隐藏行。对于那些坚持使用 Apache POI

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多