分分钟搞定 Excel 数据导出

1. 概览

数据导出是日常开发的常见功能,及将数据导出为Excel并提供下载。Java 生态存在大量的 Excel 操作类库,基于这些类库便可完成相关功能。这样,大量繁杂、无意义的代码耗费着宝贵的人力资源,大家距离 996 又近了几分,那有没有更优解呢?

1.1. 背景

刚刚接到产品需求,准备为众多“列表”功能增加下载支持,简单来说就是:新增一个“导出”按钮,点击时,将列表数据导入到 Excel 并进行下载。

需求很简单,功能也很明确,接到需求后,小伙伴们着手准备:

  1. 使用 poi 可以将数据写入 Excel,但 poi 的 api 过于复杂,存在一定的学习成本;

  2. 工作量巨大,涉及较多的列表页面,每个列表的字段数量也不少;

  3. 期望列表展示和Excel 数据同源,发生变更时只需要修改一次,列表和Excel能同时生效;

不知道你怎么想,面对这些枯燥的体力工作,我极为反感。

1.2. 目标

“懒” 是人类进步的“原动力”。手懒心不懒,让脑力解放体力!!!

设计目标如下:

  1. 屏蔽复杂的 API,降低使用门槛;

  2. 使用声明式替代编码,提升开发效率;

  3. 为一般场景提供通用能力,方便快速支持以下能力:

  • 自定义标题

  • 自定义顺序

  • 支持嵌套对象

  • 支持自定义格式

  • 支持自定义样式

  1. 为特殊场景提供定制能力,以满足个性化需求;

2. 快速入门

2.1. 引入 starter 以及相关依赖

首先,在 pom 文件中增加 excelasbean starter 以及 poi 依赖。

<dependency>
    <groupId>com.geekhalo.lego</groupId>
    <artifactId>lego-starter-excelasbean</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
</dependency>

2.2. 使用 ExcelAsBeanService 完成 excel 导出

其次,将 ExcelAsBeanService 注入到自己的 Sevice 中,使用 write 等一系列方法完成 数据写入。

示例代码如下:

// 注入 excelAsBeanService
// 由 ExcelAsBeanAutoConfiguration 完成 ExcelAsBeanService 的注册
@Autowired
private ExcelAsBeanService excelAsBeanService;

public <D extends User> HSSFWorkbook downloadUser(Class<D> cls, Supplier<D> supplier){
    // 1. 准备数据
    List<D> users = createUser(100, supplier);
    // 2. 创建 Workbook
    HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
    // 3. 向 Sheet 中写入数据
    this.excelAsBeanService.writHeaderAndDataToSheet(hssfWorkbook,"User", cls, users);
    // 4. 返回 workbook
    return hssfWorkbook;
}

ExcelAsBeanService 中涉及写操作包括:

方法名 含义
writHeaderAndDataToSheet 一次性写入 标题 和 数据
writDataToSheet 仅写入数据,主要用于数据追加操作
2.3. 在 JavaBean 上增加相关注解

最后,只要在 J

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值