1. 程式人生 > >POI 解析excel時sheet的實際行數,數字問題

POI 解析excel時sheet的實際行數,數字問題

Apache 的POI 解析excel時如何獲得實際行數

String filePath="C://test.xls";
  HSSFWorkbook workbook = null;
  try {
   workbook = new HSSFWorkbook(new POIFSFileSystem(
     new FileInputStream(filePath)));
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  HSSFSheet sheetLi=workbook.getSheet("Li");
  System.out.println(sheetLi.getLastRowNum());結果一
  System.out.println(sheetLi.getFirstRowNum());結果二
  System.out.println(sheetLi.getPhysicalNumberOfRows());結果三

1 結果三總是比結果一大一

   行數的索引從0開始,結果二顯示的是excel左側顯示的實際數字

2 這裡的行數並不是實際有資料的行數

   當你新建一個sheet還沒有新增任何內容時獲得的sheetLi為null

      同樣row 和cell也是null

     但是當插入資料後又把內容清除掉時列印的結果並不發生變化,row 和cell仍然是物件就不再是null了

     然後當你把實際存在過資料的行全部刪掉時,就一切恢復原樣和最初新建的效果都是null

 所以要是判斷實際有資料的行數就要自己來做了

3 單元格的型別

  在excel裡設定的單元格格式只代表excel裡的樣式

   POI自己的cellType

      HSSFCell.CELL_TYPE_NUMERIC 單元格格式是數值可以得到數字和日期的值,如果你設定的小數位為2,比如輸入為1,那麼excel顯示是1.00,但是實際getNumericCellValue()得到的是1.0   

      HSSFCell.CELL_TYPE_STRING 單元格格式是文字  只能用getStringCellValue() 

      單元格格式是常規,填文字就是文字,只能得到文字那麼填數字的話 可以得到數字和日期的值,字元也不行;特別注意比如填的是1,那麼得到的數字是1.0

       想要得到其他型別就要自己做轉換