2012-05-10 162 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版本的人來說,這可能是唯一的解決方案。

相關問題