poi讀取Excel檔案執行到row.getCell(0).getStringCellValue()異常
阿新 • • 發佈:2019-02-15
環境說明
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()獲取型別,再根據不同型別呼叫不同的方法來獲取內容