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

写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!

  今天尝试使用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)):

看下二级标题的效果:

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要实现Excel合并单元格导入导出,可以使用Apache POI库和EasyPoi库。 首先,在项目的pom.xml文件中引入Apache POI库的依赖。可以使用以下代码: ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.16</version> </dependency> ``` 然后,导入要使用的接口代码。在Excel导入的控制器方法中,使用MultipartFile参数接收上传的Excel文件,并调用MyExcelUtils工具类的importExcel方法将Excel数据转换成指定的实体类列表。具体的代码如下: ```java @PostMapping(value = "/importTest") public void importTest(@RequestParam("file") MultipartFile file) { List<ProjectGroupExcelVO> projectGroupExcelVOList = MyExcelUtils.importExcel(file, 1, 2, ProjectGroupExcelVO.class); System.out.println(projectGroupExcelVOList.toString()); System.out.println("-----------------------------------"); System.out.println("写入数据库"); } ``` 其中,ProjectGroupExcelVO类使用EasyPoi库的注解来定义Excel的列名、单元格样式等信息。具体的代码如下: ```java import cn.afterturn.easypoi.excel.annotation.Excel; import cn.afterturn.easypoi.excel.annotation.ExcelCollection; import lombok.Data; import java.util.List; @Data public class ProjectGroupExcelVO { @Excel(name = "小组名称", needMerge = true, width = 20, height = 8) private String groupName; @Excel(name = "小组口号", needMerge = true, width = 20, height = 8) private String groupSlogan; @Excel(name = "小组类型", needMerge = true, width = 20, height = 8) private String groupType; @ExcelCollection(name = "组员信息") private List<GroupUserExcelVO> groupUsers; } ``` 这样就可以实现Excel合并单元格导入导出了。使用EasyPoi库的注解可以方便地定义Excel的样式和结构,而Apache POI库提供了操作Excel的功能。具体的导出Excel的方法可以根据需求进行编写。<span class="em">1</span><span class="em">2</span><span class="em">3</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值