2017-09-05 799 views
0

我试图在一行中获得非空白数量的单元格。Apache POI。使用row.getLastCellNum()检索非空白单元格的数量

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

(int) row.getLastCellNum();

但对于两行我得到一个int比实际上在我的表值细胞的数量更大。这可能是什么原因?单元格格式化和/或样式可以以某种方式负责?我还注意到,如果我从Excel表中删除值(手动,而不是从代码),poi仍然认为它们是非空白(null?)并将它们包括在总数中。

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

+1

您是否[在阅读Apache POI文档时重复遍历行和单元格](http://poi.apache.org/spreadsheet/quick-guide.html#Iterator),特别是空白vs null单元格上的位? – Gagravarr

+0

是的,我有。虽然关于空白与空单元格的解释在这里非常模糊(至少对我来说是这样),因此出现了这个问题。 – SergioLeone

+0

它只是反映了Excel文件格式的工作方式!空单元格从未使用或设计过。空白单元格可能具有样式,格式,边界等,或者可能已经习惯了,Excel稍后懒得删除它们... – Gagravarr

回答

0

现在我已经解决了它这样的:

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

将是很好,如果任何人有任何更好的解决方案。

相关问题