Springboot excel导入 EasyPOI 双表头的excel 导入数据

在工作中难免会遇到excel的数据导入。但是有些时间Excel的表头却不那么友好的。直接看图
这里就出现双表头的头的导入在这里插入图片描述
第一步 :导包
maven

 <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-web</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-annotation</artifactId>
            <version>3.2.0</version>
        </dependency>

第二步:
model 层
导入的员工肯定有一个实体类对应。在实体类上加上 @Excel(name = “”)

@Entity
@Table(name = "employee")
public class Employee implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(nullable = false)
    @Excel(name = "姓名")
    private String empName;

    @Column(nullable = false)
    @Excel(name = "身份证号")
    private String idCardNo;

    @Column(nullable = false)
    @Excel(name = "手机号")
    private String phone;

    @Excel(name = "工号")
    private String empNo;

    @Excel(name = "性别")
    private int sex;

    private Byte maritalStatus;

    @Excel(name = "邮箱")
    private String email;

    @Excel(name = "QQ")
    private String qq;

    @Excel(name = "微信号")
    private String wechat;

    @Column(nullable = false)
    private Long deptId;

    private Long jobId;

    @Excel(name = "员工状态")
    private String empStatus;

    @Column(nullable = false)
    private Boolean isUser;

    @Excel(name = "入职时间",format = "yyyy/MM/dd")
    private Date hiredate;

    private String remark;

    private Date createTime;

    private Long createBy;

    @Column(nullable = false)
    private Long guildId;

    private Boolean isLeader;

    @Excel(name = "民族")
    private String nation;

    @Excel(name = "户籍性质")
    private String householdRegister;

    @Excel(name = "户口所在地")
    private String idAddress;

    private String nowAddress;

    @Excel(name = "籍贯")
    private String nativePlace;

    @Excel(name = "岗位")
    private String postName;

    @Excel(name = "转正时间",format = "yyyy/MM/dd")
    private Date workdate;

    @Excel(name = "合同结束日期",format = "yyyy/MM/dd" )
    private Date enddate;

    @Excel(name = "工资卡号",groupName = "账户信息",orderNum = "16")
    private String bankCardNo;

    @Excel(name = "开户行及支行")
    private String openingBank;

   @Excel(name = "名字",groupName = "紧急联系人",orderNum = "21")
    private String urgentName;

   @Excel(name = "关系")
    private String urgentRelationship;

    @Excel(name = "电话")
    private String urgentPhone;

    private String laborUrl;

    private String diplomaUrl;

    private String identityUrl;

    private String nickName;

    @Excel(name = "部门",groupName = "职位信息",orderNum = "13")
    private String dept;

    @Excel(name = "二级部门(运营分组)")
    private String twoDept;

一般来说都是写一个 @Excel(name = “电话”) 对应excel的表头就可以,但是有些就是数据就是对应不上。
这个时候你就需要用到
@Excel(name = “部门”,groupName = “职位信息”,orderNum = “13”)
在这里插入图片描述
这样实体类的工作就算完成了,日期的很简单转换的,看你传入什么格式,你用format 属性 标记一下就可以
就下来就是导入了
第三步
controller

    @RequestMapping(value = "/importEmployeeExcel", method = RequestMethod.POST)
    @ApiOperation(value = "导入员工表", notes = "", response = Result.class)
    public Result importEmployeeExcel(MultipartFile multipartFile) throws IOException {
        ImportParams params = new ImportParams();
        // 这里是设置标题的行数。一般都是一行(就是上面第一张图里面的员工信息一行),也有没有标题的,没有标题行就设置为0
        params.setTitleRows(1);
        // 这里就是双表头的行数。所以它是2 ,因为表头行占了2行。所以如果你只有一行,就是1
        params.setHeadRows(2);
        // 这个设置的是 sheet 的页数,有可能一个Excel有多个sheet ,默认从0开始
        params.setStartSheetIndex(0);  
        try {
            // 这个直接复制过去,改一下实体类就可以
            List<Employee> employeeList = ExcelImportUtil.importExcel( multipartFile.getInputStream(), Employee.class, params);
            System.out.println(employeeList);
            this.employeeService.insertEmployeeList(employeeList);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return super.success();
    }

当然,这只是我自己做的,测试是没有问题的,如果不能解决你的问题请到官网easyPOI官网

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

memory_cood

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值