EasyExcel简介

git地址:https://github.com/alibaba/easyexcel
文档:https://easyexcel.opensource.alibaba.com/docs/current/

场景

在使用模版填充功能时,需要根据业务数据删除excel模版中某些sheet页,或者删除某个sheet页中部分行数据,是一种动态方式生成结果。

excel示例文件:

规则:工作、学习、生活3个sheet页中,如果学习、生活没有数据,则结果文件只有工作一个sheet页面。

实现思路

EasyExcel官方文档中并没有删除sheet页的示例和文档,根据之前使用easyexcel插件的经验,这类处理一般都是通过easyexcel的拦截器实现的。

此外,从git的issues问题中,可以看到之前有人提过这个问题。

https://github.com/alibaba/easyexcel/issues/2345

那么我们就根据这个思路进行功能实现。

大致思路:
(1)整个工作薄workbook注册拦截器
(2)工作、学习、生活分别为三个数据对象
(2)每个sheet页注册拦截器
(3)每个sheet页填充的时候判断对应的数据对象是否为空
(4)如果为空,sheet拦截器给当前sheet页名称打标
(5)整个工作薄完成后,workbook拦截器对打标的sheet删除

SheetWriteHandler

1、实现AbstractSheetWriteHandler的抽象类,重写afterSheetCreate方法

WorkbookWriteHandler

1、实现WorkbookWriteHandle的抽象类,重写afterWorkbookDispose方法

public class CustomWorkbookWriteHandler extends AbstractWorkbookWriteHandler {@Overridepublic void afterWorkbookDispose(WriteWorkbookHolder writeWorkbookHolder) {Workbook workbook =  writeWorkbookHolder.getWorkbook();int numberOfSheets = workbook.getNumberOfSheets();List<String> removeList = Lists.newArrayList();for (int i=0; i<numberOfSheets; i++) {Sheet sheetAt = workbook.getSheetAt(i);String sheetName = sheetAt.getSheetName();if (sheetName.endsWith("删除")) {removeList.add(sheetName);}}if (CollectionUtils.isNotEmpty(removeList)) {removeList.forEach(e -> {int sheetIndex = workbook.getSheetIndex(e);workbook.removeSheetAt(sheetIndex);});}}
}

业务逻辑中注册拦截器

总结

EasyExcel中对excel文件特殊操作一般都是通过拦截器实现的,需要自己去不断测试,需要花费一定的时间去实现。所以,在日常开发与easyexcel相关功能时,一定要评估好工作量,提前进行一些调研。

EasyExcel删除模版Sheet页相关推荐

  1. POI删除所有sheet页

      使用POI删除Sheet页时,不能使用下面的代码循环删除.因为执行一遍后第二个sheet页的下标变成了0,但是i变成了1,所以循环里面应该放workbook.removeSheetAt(0); f ...

  2. easyexcel获取所有sheet页名称_老板让我汇总多个sheet,我不会,同事却说使用PQ仅需2步搞定...

    临近年底,老板总是会让我们汇总与统计很多数据,很多人都会在其身上花费大量的时间,今天就跟大家分享下如何快速完成数据汇总.数据汇总一般分为两类,多sheet汇总,以及多工作薄汇总,今天我们我能先来看一下 ...

  3. easyexcel获取所有sheet页名称_【EXCEL】如何快速获取所有表格名称

    1.复制粘贴 傻瓜操作,10个表格以下&&不需要动态操作的,建议别用公式折腾了 本专栏创作灵感源自于:在本废柴manually复制粘贴了30个表格名之后,发现还有60+的ummmmmm ...

  4. EasyExcel web下载excel,多sheet页demo

    EasyExcel web下载excel,多sheet页demo pom.xml <dependency><groupId>com.alibaba</groupId> ...

  5. EasyExcel 实现多个Sheet页导出

    1 Maven依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel< ...

  6. EasyExcel获取excel文件中sheet页总数,及对应sheet页名称及下标

    问题: 多工作表excel文件读取,获取文件中总共有多少个sheet页,及获取对应sheet页名称 代码 import com.alibaba.excel.EasyExcel; import com. ...

  7. 4. java使用easyexcel导入excel-多个sheet页、每个sheet页存在多个表头导入的情况、踩坑记录、可在线拉取成品demo、也可参详详细演示流程、贴心手把手操作

    文章目录 1.EXCEL模板数据格式.导入结果展示 2.避坑防雷招待所[♥] 2.1.与poi-Jar包文件版本冲突 2.2.传入后台读取文件流报空指针 3.在线获取代码及模板 3.1.Github获 ...

  8. python 创建excel,操作excel,保存excel,修改excel,删除sheet页

    from openpyxl import Workbook #该包可进行excel相关的操作 import time import datetime import locale #支持中文日期loca ...

  9. easyExcel多sheet页导入

    /*** Description: 获取日前交易excel数据** @param file* @return*/ private Map<String,List<SpotDailyDeal ...

最新文章

  1. volatile: 多线程程序员最好的朋友
  2. canvas绘制正文形并填充-2
  3. origin如何绘制双y轴曲线_Origin用矩阵绘制多层曲面映射图
  4. WinForm中使用AnyCAD三维控件 の 初始化
  5. 飞鸽传书不能传送文件
  6. Excel文件读取的两种方式
  7. 13. 星际争霸之php设计模式--正面模式
  8. class unity 定义类_【Unity学习笔记】C#基础-类(Classes)
  9. html可编辑下拉选项卡,bootstrap可编辑下拉框jquery.editable-select
  10. 基于RV1126平台imx291分析 --- rkcif_mipi注册
  11. 字体主题宝库:25款很好看的液晶数字字体下载
  12. 光纤光缆那些纤常识【华光昱能光知识】
  13. linux火狐快捷键设置,使用火狐浏览器所有的快捷键大全
  14. 【ES6】ES6简介,ES6常用操作,let 、var和const的区别,看完我写的ES6,马上会的,你就是高手
  15. 了解DPDK——内核NIC接口
  16. 云计算360度 微软专家纵论产业变革
  17. C# 在load构造函数设定dgv背景字体颜色无效 解决办法
  18. 关于Android应用开发的一些安全注意事项
  19. 计算机微博实验报告,网络信息交流的工具与模式(实验报告).doc
  20. Cesium深入浅出之如何获取帧率

热门文章

  1. 线性方程组在计算机方面的应用,在线性方程组的简单应用》(安顺学院数学和计算机科.doc...
  2. flex布局练习,仿手机淘宝首页
  3. oracle试算平衡表查询,试算平衡表
  4. 概述、 BGP AS 、BGP 邻居、 BGP 更新源 、BGP TTL 、BGP路由表、 BGP 同步
  5. Python小黄人绘制
  6. Python批量获取手机号码归属地(图文展示)
  7. Android Q 正式命名为 Android 10
  8. matlab 有一函数 _写一程序_输入自变量的值_输出函数值.,第2讲 MATLAB入门1_数学建模_ppt_大学课件预览_高等教育资讯网...
  9. C语言提取字符对应的ASCAl,ascall码对照表(ASCII码表)
  10. 《红警2》防空步兵都说了些什么?