基于EasyPoi注解方式的Excel导入导出

一、前提

1. 依赖

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

2. 导入导出实体类

@ExcelTarget("users")
public class User implements Serializable {

    /**
     * @desc id
     */
    @Excel(name = "编号")
    private String uid;
    
    /**
     * @desc username
     */
    @Excel(name = "用户名")
    private String username;
    
    /**
     * @desc password
     */
    @Excel(name = "密码")
    private String password;
}

EasyPoi基于注解方式的导入导出以实体类为单位映射成Excel表中的一行数据,即Entity=RowField=Cel。所以要求实体类必须实现Serializable

3. EasyPoi注解:

  • @Excel 作用到filed上面,是对Excel一列的一个描述
  • @ExcelIgnore 和名字一样表示这个字段被忽略跳过这个导导出
  • @ExcelTarget 这个是作用于最外层的对象,描述这个对象的id,以便支持一个对象可以针对不同导出做出不同处理
  • @ExcelEntity 表示一个继续深入导出的实体,但他没有太多的实际意义,只是告诉系统这个对象里面同样有导出的字段
  • @ExcelCollection 表示一个集合,主要针对一对多的导出,比如一个老师对应多个科目,科目就可以用集合表示

二、导入导出

1. 实体类

@ExcelTarget("users") //EasyPoi作为导入导出用实体的唯一标识
public class User implements Serializable {

    /**
     * @desc id
     */
    @Excel(name = "编号") //Excel表内每个Cel的描述,@Excel内的属性可以对单元格做修饰
    private String uid;

    /**
     * @desc username
     */
    @Excel(name = "用户名")
    private String username;


    /**
     * @desc password
     */
    @Excel(name = "密码")
    private String password;
}

2. 导入示例

/**
* Excel 导入
* @param file
* @return
* @throws Exception
*/
@PostMapping("/import")
@ResponseBody
public String excelImport(MultipartFile file) throws Exception {

   //Excel导入配置参数
   ImportParams params = new ImportParams();
   /**
   	* EasyPoi提供ExcelImportUtil工具类进行导入
   	* 参数1:输入流
   	* 参数2:导入类型
   	* 参数3:导入配置参数
   	* 返回值:从Excel表中获取到的数据
   	*/
   List<User> users = ExcelImportUtil.importExcel(file.getInputStream(), User.class, params);
   users.forEach(System.out::println);
   // 将数据批量插入到数据库
   userMapper.addUserBatch(users);

   return "导入成功";
}

3. 导出示例

/**
 * Excel 导出
 * @param response
 * @throws IOException
 */
@GetMapping("/export")
public void excelExport(HttpServletResponse response) throws IOException {
    //获取要导出的数据
    List<User> users = userMapper.queryAll();
    /**
   	* 导出的参数配置
   	* 参数1:标题
   	* 参数2:sheet名称
   	*/
    ExportParams exportParams = new ExportParams("用户列表","用户信息");
    /**
   	* EasyPoi提供ExcelExportUtil工具类进行导出
   	* 参数1:导出的参数配置
   	* 参数2:导出的类型
   	* 参数3:导出的数据
   	* 返回值:workbook实例
   	*/
    Workbook workbook = ExcelExportUtil.exportExcel(exportParams, User.class, users);
    //设置响应头、获取输出流
    response.setHeader("content-disposition","attachment;fileName="+ URLEncoder.encode("用户信息.xls","UTF-8"));
    ServletOutputStream outputStream = response.getOutputStream();
    //写入Excel
    workbook.write(outputStream);
    outputStream.close();
    workbook.close();
}
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页