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官网

————————————————

版权声明:本文为CSDN博主「memory_cood」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/memory_cood/article/details/104477598

相关文章
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
缓存 Java 应用服务中间件
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——依赖导入和Thymeleaf相关配置
在Spring Boot中使用Thymeleaf模板,需引入依赖`spring-boot-starter-thymeleaf`,并在HTML页面标签中声明`xmlns:th=&quot;http://www.thymeleaf.org&quot;`。此外,Thymeleaf默认开启页面缓存,开发时建议关闭缓存以实时查看更新效果,配置方式为`spring.thymeleaf.cache: false`。这可避免因缓存导致页面未及时刷新的问题。
556 0
|
Java Maven Android开发
eclipse如何导入springboot项目
本文介绍了如何在Eclipse中导入Spring Boot项目。
972 1
eclipse如何导入springboot项目
|
前端开发 Java easyexcel
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
1162 8
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
前端开发 Java easyexcel
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
1129 6
|
JavaScript 前端开发 easyexcel
基于SpringBoot + EasyExcel + Vue + Blob实现导出Excel文件的前后端完整过程
本文展示了基于SpringBoot + EasyExcel + Vue + Blob实现导出Excel文件的完整过程,包括后端使用EasyExcel生成Excel文件流,前端通过Blob对象接收并触发下载的操作步骤和代码示例。
3538 0
基于SpringBoot + EasyExcel + Vue + Blob实现导出Excel文件的前后端完整过程
如何根据Excel某列数据为依据分成一个新的工作表
在处理Excel数据时,我们常需要根据列值将数据分到不同的工作表或文件中。本文通过Python和VBA两种方法实现该操作:使用Python的`pandas`库按年级拆分为多个文件,再通过VBA宏按班级生成新的工作表,帮助高效整理复杂数据。