在用POI讀取Excel內容時,經常會遇到數據格式化的問題.
比如:數字12365會變為12365.0;字符串數字123也會變為123.0,甚至會被變為科學計數法.另外日期格式化也是一個頭疼的問題.其實最希望的方式是Excel是什么,那POI取出來就是什么,不要搞任何轉換.
網上搜羅各種格式化方式后,找到最滿意的一種:
import org.apache.poi.hssf.usermodel.HSSFDataFormatter; import org.apache.poi.hssf.usermodel.HSSFDateUtil; public Object getValue(Cell cell) { if (cell == null) return ""; //如果是日期類型(POI會把日期轉數字) if (cell.getCellType() == cell.CELL_TYPE_NUMERIC) { //Check if a cell contains a date if (HSSFDateUtil.isCellDateFormatted(cell)) { Date d = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()); return new SimpleDateFormat("yyyy-MM-dd").format(d); } }
//如果是中文類型的日期(轉為xxxx-xx-xx格式)
// m月d日 :dataFormat=58,dataFormatString=reserved-0x1c
//yyyy年m月d日 :dataFormat=31,dataFormatString=reserved-0x1f
if (cell.getCellStyle().getDataFormat() == 58 || cell.getCellStyle().getDataFormat() == 31)
return DateUtil.date2string(cell.getDateCellValue(), DateUtil.YYYY_MM_DD);
HSSFDataFormatter df = new HSSFDataFormatter(); return df.formatCellValue(cell); }
這樣,拿到的數據就都是原來的樣子了