excel导入数据处理(springboot)
//1.解决跨域 @CrossOrigin //2.声明restContoller @RestController //3.设置父路径 @RequestMapping(value="/sys") public class UserController { @Autowired private UserService userService; /** * 导入Excel,添加用户 * 文件上传:springboot * 接收字段名name为file传过来的文件 */ @RequestMapping(value="/user/import",method = RequestMethod.POST) public Result importUser(@RequestParam(name="file") MultipartFile file) throws Exception { //1.根据Excel文件创建工作簿 Workbook wb = new XSSFWorkbook(file.getInputStream()); //2.获取Sheet Sheet sheet = wb.getSheetAt(0);//参数:索引,0表示第一个sheet //3.获取Sheet中的每一行,和每一个单元格,并封装到list List<User> list = new ArrayList<>(); //第一行是标题所以rowNum=1 for (int rowNum = 1; rowNum<= sheet.getLastRowNum() ;rowNum ++) { Row row = sheet.getRow(rowNum);//根据索引获取每一个行 //构造一个数组存储数据 Object [] values = new Object[row.getLastCellNum()]; for(int cellNum=0;cellNum< row.getLastCellNum(); cellNum ++) {//从第一列开始 Cell cell = row.getCell(cellNum); Object value = getCellValue(cell); values[cellNum] = value; } //User类添加构造方法,完成数据组装 User user = new User(values); list.add(user); } //4.传递集合对象,批量保存用户 userService.saveAll(list); return new Result(ResultCode.SUCCESS); } /** * 获取excel单元格数据 */ public static Object getCellValue(Cell cell) { //1.获取到单元格的属性类型 CellType cellType = cell.getCellType(); //2.根据单元格数据类型获取数据 Object value = null; switch (cellType) { case STRING: value = cell.getStringCellValue(); break; case BOOLEAN: value = cell.getBooleanCellValue(); break; case NUMERIC: if(DateUtil.isCellDateFormatted(cell)) { //日期格式 value = cell.getDateCellValue(); }else{ //数字 value = cell.getNumericCellValue(); } break; case FORMULA: //公式 value = cell.getCellFormula(); break; default: break; } return value; } }
/** * 用户实体类 * lombokz注解:Getter,Setter编译时自动生成getter和setter方法; * NoArgsConstructor编译时自动生成无参数构造函数 */ @Entity @Table(name = "sys_user") @Getter @Setter @NoArgsConstructor public class User implements Serializable { private static final long serialVersionUID = 1106454283013182419L; //Id @id private String id; //用户名称 private String username; //手机号码 private String mobile; //工号 private String account; //性别 1男 0女 private Integer sexId; //出生日期 private Date birthday; public User(Object [] values) { //excel里表格标题顺序依次为:用户名;手机号;工号;性别;出生日期 this.username = values[0].toString(); this.mobile = values[1].toString(); //double带.0,所以需要去掉小数点及以后的 this.account = new DecimalFormat("#").format(values[2]).toString(); //因为性别这里用1和0存,识别的excel是double类型,所以需要处理 this.sexId =((Double) values[3]).intValue(); this.birthday = (Date) values[4]; } }