1. 程式人生 > >poi讀取Excel檔案執行到row.getCell(0).getStringCellValue()異常

poi讀取Excel檔案執行到row.getCell(0).getStringCellValue()異常

環境說明

POI:poi.3.1.1.jar
Excel檔案:
這裡寫圖片描述

具體問題

測試匯入Excel檔案,並將檔案資料批量匯入資料庫功能時,一直無法成功匯入,不打斷點沒有拋任何異常,部分程式碼如下:

/**
     * 匯入區域檔案資料
     * @return
     * @throws Exception
     */
    public String importXls() throws Exception {
        List<Region> regionList = new ArrayList<Region>();
        HSSFWorkbook workbook = new
HSSFWorkbook(new FileInputStream(regionFile)); // 根據名稱獲得指定Sheet物件 HSSFSheet hssfSheet = workbook.getSheet("Sheet1"); for (Row row : hssfSheet) { int rowNum = row.getRowNum(); if (rowNum == 0) { continue; } String idStr = row.getCell(0
).getStringCellValue(); Integer id = new Integer(idStr); String province = row.getCell(1).getStringCellValue(); String city = row.getCell(2).getStringCellValue(); String district = row.getCell(3).getStringCellValue(); String postcode = row.getCell(4
).getStringCellValue();

設定斷點後,執行到String idStr = row.getCell(0).getStringCellValue(); 出錯,如下:
這裡寫圖片描述

猜測應該是獲取不到Cell的內容,對比檔案發現區域編號都是數字,才找出問題所在。

解決方案

在遍歷Cell的時候,加上如下程式碼:

// 將區域編號的cell中的內容當做字串處理
row.getCell(0).setCellType(HSSFCell.CELL_TYPE_STRING);

總結

Excel中cell的內容可能是純數字,可能是字元,可根據不同的方法來獲取值。
對於純數字,可用getNumericCellValue()獲取
對於字元,可用getStringCellValue()獲取
也可用setCellType(HSSFCell.CELL_TYPE_STRING)統一將cell中的內容當做字串
或者用getCellType()獲取型別,再根據不同型別呼叫不同的方法來獲取內容