装载流
public static List<Map<String, Object>> importExcel(MultipartFile file, Object obj) throws Exception {
//装载流
XSSFWorkbook hw = new XSSFWorkbook(file.getInputStream());
//获取第一个sheet页
XSSFSheet sheet = hw.getSheetAt(0);
//容器
List<Map<String, Object>> ret = new ArrayList<Map<String, Object>>();
//遍历行 从下标第一行开始(去除标题)
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<String, Object> 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<String, Object> map = new HashMap<String, Object>();
//注意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 "";
}
}