2012-05-10 165 views
1

我们使用Apache POI 3.8解析过人之处。我们需要能够检测(并跳过)隐藏行,因为它们往往包含我们用例中的垃圾数据。检测隐藏的单元格在Excel中使用Apache POI

这似乎可以这样:

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()) 
     ... 

但对于每一行,我们得到(在上面的自定义输出回路):

Cell 0 is not hidden [email protected]/false 

请问“getHidden()”不工作,还是不工作,因为我认为它呢?是否有另一种检测隐藏行的方法? (隐藏列也将是一个不错的奖金,但稍显不足有关ATM),你应该

回答

5

getRowStyle应该正常工作。

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

+0

为了隐藏行'hidden'被设置为TRUE;但除非明确设置,'row.getHeight()'总是返回其可能不是一个零的默认工作表值。我们可以依靠'row.getZeroHeight()' –

+0

getZeroHeight()适用于我现在面临的用例。因此,尽管“getRowStyle()”仍然不起作用,但看起来应该如此。我是否应该将您的回答标记为正确答案,或者等到有人对getRowStyle()问题给出了一些反馈? (我是计算器,而新) – nablex

+0

通常情况下,行样式应该正确地加载POI,从而'getRowStyle()。getHidden()'应该工作。或者我想。我假设我们可以安全地依靠'getZeroHeight()'。为了正确的答案,我不知道。如你所愿 – Alex

2

尝试一些方法后,row.getZeroHeight()工作正常识别隐藏的行。对于那些坚持使用Apache POI < = 3.7版本的人来说,这可能是唯一的解决方案。

相关问题