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];
    }
}

 

posted @ 2020-12-20 23:04  lost_s  阅读(417)  评论(0)    收藏  举报