java解析excel

    /**
     *     insertSave导入数据处理,数据转成Map<Integer, Object>,放在List<Map<Integer, Object>>中
     * 
     * @param sheet
     */
    private List<Map<Integer, Object>> insertSave(Sheet sheet,Model m) {
        int i;
        List<Map<Integer, Object>> delforList = new ArrayList<>();
        for (i = 2; i < sheet.getLastRowNum() + 1; i++) {// 数据记录从第三行开始
            Row row = sheet.getRow(i);
            if(null == row) {
                return delforList;
            }
            Map<Integer, Object> map = new HashMap<Integer, Object>();
            // row.getLastCellNum()由于是获取最后一个有值的列个数,不需要这个方案,这里固定截止到下标为21列
            for (int j = 0; j < 22; j++) {
                Cell c = row.getCell(j);
                if (null != c) {
                    switch (c.getCellTypeEnum()) {
                    case _NONE:
                    case BLANK:
                        map.put(j,"");
                        break;
                    case BOOLEAN:
                        map.put(j, c.getBooleanCellValue());
                        break;
                    case ERROR:
                        map.put(j, c.getErrorCellValue());
                        break;
                    case FORMULA:
                        map.put(j, c.getCellFormula());
                        break;
                    case NUMERIC:
                        Object value = null;
                        if (HSSFDateUtil.isCellDateFormatted(c)) {// 时间类型
                            Date date = c.getDateCellValue();
                            if (j == 15) {
                                value = DateFormatUtils.format(date, "yyyy-MM-dd HH:mm:ss");
                                map.put(j, value);
                                break;
                            }
                            value = DateFormatUtils.format(date, YYYY_MM_DD);
                            map.put(j, value);
                        } else {// 数值类型
                            value = c.getNumericCellValue();
                            DecimalFormat df = new DecimalFormat(_0);
                            value = df.format(value);
                            map.put(j, value);
                        }
                        break;
                    default:
                        if (StringUtils.isNotBlank(c.getStringCellValue())) {
                            map.put(j, c.getStringCellValue());
                        }else {
                            map.put(j,"");
                        }
                        break;
                    }
                }else {
                    map.put(j,"");
                }
            }
            // 关键字段都为空的,结束遍历
            if (StringUtils.isEmpty(map.get(2).toString()) && StringUtils.isEmpty(map.get(4).toString())
                    && StringUtils.isEmpty(map.get(5).toString()) && StringUtils.isEmpty(map.get(6).toString())
                    && StringUtils.isEmpty(map.get(8).toString()) && StringUtils.isEmpty(map.get(21).toString())) {
                int num = i + 1;
                m.addAttribute("sourse", StringUtils.join("数据读取截止于", num, "行:六个关键字段都为空或者该行无数据"));
                return delforList;
            }
            delforList.add(map);
        }
        return delforList;
    }

 

posted @ 2019-01-10 15:21  自足孤独者  阅读(417)  评论(0编辑  收藏  举报