• 使用easypoi导出excel简单使用、合并单元格(groupName)


    原文参考:https://blog.csdn.net/H900302/article/details/109726240

    今天尝试使用easypoi做Excel导出,首先如它的名字一样,导出相比之前使用的poi确实简单了不少,但是它的官方文档是真的不详细,有待完善,拿我导出的文件来说吧(图如下),这个标题合并单元格的效果是@Excel注解的groupName属性实现的,但是在官方文档中说明@Excel注解的时候并没有对groupName属性做说明,而且源码中虽然有这个属性,但是没有对这些属性做一点注释说明,直到我看到文档的这一节2.12 groupname和ExcelEntity的name属性才对groupname属性进行说明,还有错别字真是太多了。

     

    虽然感觉什么都有,但是就是源码的注释太少了,根本不知道这些方法是干啥的,虽然抱怨不是个好现象,但是没忍住。。。吐槽到此结束,说归说,入门还是离不开它的官方文档,计划接下来几篇记录一下使用easypoi完成常用的表格操作。

    首先,准备下测试表和数据:

     

    实体类、Mapper接口啥的就不贴了,xml中也只有一个简单的查询:

    <select id="selectUsers" resultType="com.example.springbootmp.dto.user.UserMobileDto">
    select * from t_user_excel
    </select>

    先看下导出的文件样子和生成导出文件的实体类:

     

     

    对比上面两张图说明一下使用easypoi导出的实体UserExcelDto,按照官方的使用说明,简单的使用@Excel注解标记一下字段就好,name属性为导出表格的列明,数据库中性别存的字符串类型的man/woman,如果我们导出的时候想显示为男/女,@Excel注解有一个replace属性可以替换值,当然也可以使用枚举,easypoi也有对枚举处理的说明,这个以后再测试,暂且使用replace属性,replace值的写法形如:replace = {"A_a","B_b"},它的意思就是假如实体字段的值为a,那么导出的时候列值替换为A,其它参数同理;@Excel注解还有一个参数groupName可以很容易的实现双行表头的样子,如图中的时间一列,使用groupName可以将多个字段归并到一列。

    贴一下controller导出方法代码:

    @GetMapping
    public void export(HttpServletResponse response) throws IOException {
    List<UserExcelDto> userExcelDtos = userExcelService.selectUsers();
    String fileName = "下载的文件名";
    String sheetName = "sheet名字";
    String title = "sheet页的title";
    ExportParams exportParams = new ExportParams(title,sheetName);
    ExcelUtil.exportExcel(userExcelDtos,UserExcelDto.class,fileName,exportParams,response);
    
    }

    虽然easypoi提供了导出方法ExcelExportUtil.exportExcel(),不过我这里自定义了一个导出工具类,便于设置参数,从上面的截图可以知道,title、sheetName的作用不啰嗦了,看下导出工具类代码:

    /**
    * excel 导出
    *
    * @param list 要导出的数据
    * @param pojoClass pojo类型
    * @param fileName 文件名称
    * @param exportParams 导出表格参数
    * @param response
    */
    public static void exportExcel(List<?> list, Class<?> pojoClass, String fileName,
    ExportParams exportParams,
    HttpServletResponse response) throws IOException {
    Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list);
    downLoadExcel(fileName, response, workbook);
    }
    
    /**
    * 下载文件
    *
    * @param fileName 文件名称
    * @param response
    * @param workbook excel数据
    */
    private static void downLoadExcel(String fileName, HttpServletResponse response,
    Workbook workbook)
    throws IOException {
    try {
    response.setCharacterEncoding("UTF-8");
    response.setHeader("content-Type", "application/vnd.ms-excel");
    response.setHeader("Content-Disposition", "attachment;filename="
    + URLEncoder.encode(fileName + ".xls", "UTF-8"));
    workbook.write(response.getOutputStream());
    } catch (Exception e) {
    throw new IOException(e.getMessage());
    }
    }

    easypoi的体验到此结束,很明显有很多待优化完善的地方,就像是时间显示、枚举类使用、可能一个用户有多笔订单这种需要合并展示的,接下来几天慢慢补充。

    补充一下:

    ExportParams exportParams = new ExportParams(title,sheetName);

    通常我们并不需要导出的表格中带这个这个标题(sheet页的title),那么可以将title设置为null即可,都不传使用空构造器也可以,但是sheetName也会变为默认的sheet0、sheet1这种

    还可以用设置二级标题。如:new ExportParams("sheet也title", "日期:2020-11-18","sheet名字");

    看下title为null的效果(new ExportParams(null,sheetName)):

     

    看下二级标题的效果:

    总结:经测试,groupName是好用的

     

  • 相关阅读:
    Postgresql中string转换成timestamp类型
    zTree节点重叠或者遮挡
    Powerdesigner+Execel
    Powerdesigner+PostgreSQL
    PostgreSQL 的 distinct on 的理解
    PostgreSql问题:ERROR: operator does not exist: timestamp without time zone > character varying
    git分支小问题
    SSH问题:系统启动时,spring配置文件解析失败,报”cvc-elt.1: 找不到元素 'beans' 的声明“异常
    PostgresSQL中的限制和级联删除
    sql语句添加删除外键及其约束
  • 原文地址:https://www.cnblogs.com/super-chao/p/15219590.html
Copyright © 2020-2023  润新知