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文件
- 4. 使用Apache POI從Excel中的空白單元讀取顏色使用Apache POI
- 5. 使用Apache poi在Excel中刪除列?
- 6. 用apache poi從Java寫入Excel文件
- 7. 讀取Excel使用Apache POI
- 8. 在java中使用Apache POI讀取和寫入excel文件
- 9. 在scala中使用apache poi讀取excel文件
- 10. 如何使用Apache POI處理空行?
- 11. Apache poi excel
- 12. excel java apache poi
- 13. Apache POI。使用row.getLastCellNum()檢索非空白單元格的數量
- 14. 閱讀MS Excel中使用Apache POI
- 15. 使用Apache POI將excel文件導入到postgreSQL表中
- 16. 解析沒有Apache POI的Excel文件
- 17. Java Apache-poi,excel文件內存泄漏
- 18. Apache POI - 讀取excel文件時出錯
- 19. 使用Apache POI在Excel中刪除多行
- 20. 使用Apache POI獲取Excel中公式的計算值3.14
- 21. 在Maven項目中使用Apache POI運行.jar文件
- 22. 如何使用POI庫獲取Excel文件中的行數?
- 23. 如何使用sed計算文件中非空行的數量?
- 24. Apache POI註釋Excel
- 25. 在Excel文件中計數行但不是空行(Python)
- 26. 我怎樣才能從Excel使用Apache poi更新行數
- 27. 使用Apache poi讀取excel文件時出現內存問題
- 28. 使用Apache POI從excel文件獲取圖像及其位置
- 29. 試圖讀取使用poi apache庫的excel文件
- 30. 使用apache poi讀取Excel文件並將它們存儲到數組中
謝謝您的回答。但是,如果這些行被用戶手動刪除,我們無法處理這種行數的變化。 – 2011-06-08 08:47:01
我以前有類似的問題。我的解決方案是編寫一些幫助函數來檢查。 – easycoder 2011-08-16 17:48:01