使用Apache POI检测Excel中的隐藏单元格

5
我们正在使用 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()”方法无法正常工作还是我对其认识有误?是否有其他方法可以检测隐藏行?(检测隐藏列也是一个不错的附加功能,但目前略微不太相关)

2个回答

10

getRowStyle通常应按照您的预期工作。

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


1
对于隐藏的行,hidden 被设置为 true,但如果没有显式设置,row.getHeight() 始终返回默认工作表值,这可能不是零。我们可以依赖于 row.getZeroHeight() - Ravinder Reddy
1
getZeroHeight()函数对我现在面临的用例起作用。因此,我的问题得到了解决,尽管"getRowStyle()"仍然不能像它应该的那样工作。我应该将您的回复标记为正确答案,还是等待其他人就getRowStyle()问题提供反馈?(我在stackoverflow上还是新手) - nablex
通常情况下,POI应该能够正确加载行样式,因此getRowStyle().getHidden()应该可以正常工作。至少我是这么认为的。我想我们可以安全地依赖于getZeroHeight()。至于正确答案,我不知道。随你怎么做。 - Alex

4
尝试了几种方法后,row.getZeroHeight() 成功识别出隐藏行。对于那些使用 Apache POI <= 3.7 版本的人来说,这可能是唯一的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接