數字類型:
java.lang.IllegalStateException: Cannot get a STRING value from a NUMERIC cell
產生原因:excel表格中的數據如果是純數字,excel會將該單元格變成number類型,而java後端接收的爲string類型,所以報錯
解決方法:在讀取數據前設置cell的type
public static void readExcel() throws IOException, InvalidFormatException {
Workbook workbook = WorkbookFactory.create(new File(SAMPLE_XLSX_FILE_PATH2));
System.out.println("sheets" + workbook.getNumberOfSheets());
//獲取一張表
Sheet sheet = workbook.getSheetAt(0);
for (Row row : sheet) {
int index = 0;
for (Cell cell : row) {
//讀取數據前設置單元格類型
cell.setCellType(CellType.STRING);
String value = cell.getStringCellValue();
System.out.print("value:" + value + " ");
index++;
}
System.out.println();
}
}
也可使用
cell.setCellType(CellType.STRING);
String value = cell.getRichStringCellValue().getString();
兩者區別:
getStringCellValue()返回一個普通的舊式Java字符串
getRichStringCellValue()返回XSSFRichTextString的類型。
您可能只需要使用getStringCellValue(),除非你是做一些像複製A S preadsheet並希望保留任何格式。如果是這樣的情況下,由getRichStringCellValue(返回的XSSRichTextString對象)將包含像任何格式的信息粗體或斜體的。
日期類型:
產生原因:excel表格中如果數據是日期形式,那麼轉到後端發現變成了數字類型的日期(與常規下的日期一致)
解決方法:把數值轉換成Java的時間類型,HSSFDateUtil是POI包下的一個類,使用getJavaDate方法把Double類型轉換成Java日期類型
Date date = HSSFDateUtil.getJavaDate(Double.parseDouble(str));