我们在用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 }