我们在用Java使用poi读取Excel时,或许会遇到百分数,然而poi自动将百分数转换为了小数,如果小数是以0开头的还可能被删除了起始的0,变成了.**,虽然数值大小没变,但是直观展示变了,对于不懂开发只关注结果的领导来说难免产生误解,这一误解就是100倍的,所以大多数时候需要我们将百分号%保留,那么下面就记录一种本人总结的方式:
1 /** 2 * 获取单元格值 3 * 4 * @param row 获取的行 5 * @param column 获取单元格列号 6 * @return 单元格值 7 */ 8 public Object getCellValue(Row row, int column) 9 { 10 if (row == null) 11 { 12 return row; 13 } 14 Object val = ""; 15 try 16 { 17 Cell cell = row.getCell(column); 18 if (StringUtils.isNotNull(cell)) 19 { 20 if (cell.getCellType() == CellType.NUMERIC || cell.getCellType() == CellType.FORMULA) 21 { 22 val = cell.getNumericCellValue(); 23 if (DateUtil.isCellDateFormatted(cell)) 24 { 25 val = DateUtil.getJavaDate((Double) val); // POI Excel 日期格式转换 26 } 27 else 28 { 29 if ((Double) val % 1 != 0) 30 { 31 val = new BigDecimal(val.toString()); 32 } 33 else 34 { 35 val = new DecimalFormat("0").format(val); 36 } 37 } 38 } 39 else if (cell.getCellType() == CellType.STRING) 40 { 41 val = cell.getStringCellValue(); 42 } 43 else if (cell.getCellType() == CellType.BOOLEAN) 44 { 45 val = cell.getBooleanCellValue(); 46 } 47 //解决导入Java 读取Excel百分数保留原格式(即不转换为小数)的方法 48 else if(cell.getCellType() == CellType.FORMULA) 49 { 50 if(cell.getCellStyle().getDataFormatString().indexOf("%") != -1){ 51 val = cell.getNumericCellValue()*100+"%"; 52 } 53 } 54 55 else if (cell.getCellType() == CellType.ERROR) 56 { 57 val = cell.getErrorCellValue(); 58 } 59 60 } 61 } 62 catch (Exception e) 63 { 64 return val; 65 } 66 return val; 67 }