Apache POI是否为我们提供了任何函数来计算Excel文件工作表中“非空”行的数量?
第一次,我有一个包含10个数据行的Excel工作表,函数worksheet.getPhysicalNumberOfRows()返回确切的数字(10)。但在此之后,我删除了3行,然后该函数仍然获得10行。 POI可能会将总行数缓存到任意位置。 getPhysicalNumberOfRows()是什么意思?正如其描述的API:“返回物理定义的行数(不是表中的行数)”,但我不明白“物理定义”的含义。你能帮我解决这个问题吗?
非常感谢!使用Apache POI在Excel文件中计数非空行
回答
如果通过worksheet.removeRow(行行)删除行,则物理行数应该是7
POI使用地图存储表的行。这张地图是物理部分。见http://www.google.com/codesearch/p?hl=de#WXzbfAF-tQc/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
至于逻辑空行,尽量
int notNullCount = 0;
Sheet sheet = wb.getSheetAt(0);
for (Row row : sheet) {
for (Cell cell : row) {
if (cell.getCellType() != Cell.CELL_TYPE_BLANK) {
if (cell.getCellType() != Cell.CELL_TYPE_STRING ||
cell.getStringCellValue().length > 0) {
notNullCount++;
break;
}
}
}
}
如果你看一下POI 3.8 Beta 3中的代码,你会看到移除一行还应该删除其记录。因此,物理行的文件的数量应该下降太多
我建议你用POI
较新版本的尝试计算一个文件非空行的数目,这样做Amadeus建议并在表单上的行上循环,并检查它们是否有单元格。
如果您要手动删除,请确保使用删除行而不是仅删除单元格中的数据,然后它将返回正确的值。
我有同样的问题。如果我手动删除行,仍然rowcount不减少,当我使用sheet.getPhysicalNumberOfRows()检查。
当我深入到这个问题时,我发现了确切的问题。我在我的行中有一个电子邮件列,当我输入一个电子邮件地址时,MS Office会自动将其检测为电子邮件地址。当我手动删除整行时,携带电子邮件地址的单元格仍然具有“”作为它的值(它不可见,但是当我通过java读取值时发现该值已初始化)。因此,由于该单元格的值不是空值(“”),因此整行将被声明(排序)并增加行计数。
有趣的是,当我不输入电子邮件地址,只需输入一些字符串,然后删除该行,单元格没有得到初始化和实际上已被初始化和ROWCOUNT GOT DECEDASED。这是我发现我的问题的结果。
我终于解决了,不仅通过addding为细胞空检查,但也
if(cell != "")
希望对您
我们可以写会忽略一个自定义的方法,这可能是有用的空白行给行数。大概我们可以根据需求做出一些假设。例如,在我的情况下,如果一行的第一列值为空,并且只有第一行空行才需要计数,则该行可以被视为空白。
所以下面的代码片段可能是有益的:
public int getNonBlankRowCount(String sheetName){
int rowCount = 0;
int index = workbook.getSheetIndex(sheetName);
if(index==-1){
rowCount = -1;
return rowCount;
}else{
sheet = workbook.getSheetAt(index);
Iterator<Row> rowIterator = sheet.rowIterator();
rowCount = 0;
while (rowIterator.hasNext()) {
Row row = (Row) rowIterator.next();
cell = (HSSFCell) row.getCell(0);
String cellValue = cell.getStringCellValue();
if (cellValue.isEmpty()) {
break;
}
rowCount++;
}
return rowCount;
}
}
- 1. 无法删除使用Apache POI的空行Excel文件
- 2. Apache POI Excel表格 - 总计行数
- 3. 在Apache POI中使用Excel PERCENTILE函数
- 4. 如何使用apache poi对excel文件中的列进行计数
- 5. 使用apache POI在excel文件中编辑或添加新行
- 6. 使用Apache POI更新Excel文件
- 7. 使用Apache poi弹出excel文件
- 8. 使用Apache POI操作excel文件
- 9. 使用apache poi处理excel文件
- 10. 使用Apache POI从Excel中的空白单元读取颜色使用Apache POI
- 11. 使用Apache POI方法在Excel检查空行
- 12. 使用Apache POI将数据写入java中的excel文件
- 13. 使用Apache poi在Excel中删除列?
- 14. 用apache poi从Java写入Excel文件
- 15. 阅读java中的excel文件Apache Poi?
- 16. 使用apache poi下载excel
- 17. 读取Excel使用Apache POI
- 18. 在java中使用Apache POI读取和写入excel文件
- 19. 使用Apache Poi在内部存储中读取excel xlsx文件
- 20. 在scala中使用apache poi读取excel文件
- 21. 在Android中使用Apache POI读取MS Excel 2010文件
- 22. 无法在使用Java和Apache POI的Excel文件中编写
- 23. 如何使用apache poi遍历所有非空行?
- 24. 使用Apache POI编辑Microsoft-office .doc文件使用Apache POI
- 25. 写作到Excel使用Apache POI破坏的Excel文件
- 26. 如何使用Apache POI处理空行?
- 27. Apache poi excel
- 28. excel java apache poi
- 29. 使用apache poi在excel中使行高适合图像高度
- 30. Apache POI。使用row.getLastCellNum()检索非空白单元格的数量
谢谢您的回答。但是,如果这些行被用户手动删除,我们无法处理这种行数的变化。 – 2011-06-08 08:47:01
我以前有类似的问题。我的解决方案是编写一些帮助函数来检查。 – easycoder 2011-08-16 17:48:01