反射解析Excelに基づく集合オブジェクトの生成

1932 ワード

マウントフロー
public static List> importExcel(MultipartFile file, Object obj) throws Exception {

        //   
        XSSFWorkbook hw = new XSSFWorkbook(file.getInputStream());

        //     sheet 
        XSSFSheet sheet = hw.getSheetAt(0);

        //  
        List> ret = new ArrayList>();

        //            (    )
        for (int i = 2; i <= sheet.getLastRowNum(); i++) {
            XSSFRow row = sheet.getRow(i);
            if (row != null) {
                //  obj
                ret.add(dataObj(obj, row));
            }
        }
        return ret;
    }

単一objを組み立てる
private static Map dataObj(Object obj, XSSFRow row) throws Exception {
        Class> rowClazz = obj.getClass();
        Field[] fields = FieldUtils.getAllFields(rowClazz);
        if (fields == null || fields.length < 1) {
            return null;
        }

        //  
        Map map = new HashMap();

        //  excel        obj       (                  )
        for (int j = 0; j < fields.length; j++) {
            map.put(fields[j].getName(), getVal(row.getCell(j)));
        }
        return map;
    }

valの処理(stringとnumberのみを一時的に処理し、自分で必要なvalタイプを追加できます)
public static String getVal(XSSFCell hssfCell) {
        if (hssfCell != null ){
            if ( hssfCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
                return hssfCell.getStringCellValue().replaceAll("\\s*", "");
            }
            if ( hssfCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
                return String.valueOf(hssfCell.getNumericCellValue());
            }
            return hssfCell.getStringCellValue();
        }else {
         return "";
        }
    }