EasyExcel删除模版Sheet页
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页相关推荐
- POI删除所有sheet页
使用POI删除Sheet页时,不能使用下面的代码循环删除.因为执行一遍后第二个sheet页的下标变成了0,但是i变成了1,所以循环里面应该放workbook.removeSheetAt(0); f ...
- easyexcel获取所有sheet页名称_老板让我汇总多个sheet,我不会,同事却说使用PQ仅需2步搞定...
临近年底,老板总是会让我们汇总与统计很多数据,很多人都会在其身上花费大量的时间,今天就跟大家分享下如何快速完成数据汇总.数据汇总一般分为两类,多sheet汇总,以及多工作薄汇总,今天我们我能先来看一下 ...
- easyexcel获取所有sheet页名称_【EXCEL】如何快速获取所有表格名称
1.复制粘贴 傻瓜操作,10个表格以下&&不需要动态操作的,建议别用公式折腾了 本专栏创作灵感源自于:在本废柴manually复制粘贴了30个表格名之后,发现还有60+的ummmmmm ...
- EasyExcel web下载excel,多sheet页demo
EasyExcel web下载excel,多sheet页demo pom.xml <dependency><groupId>com.alibaba</groupId> ...
- EasyExcel 实现多个Sheet页导出
1 Maven依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel< ...
- EasyExcel获取excel文件中sheet页总数,及对应sheet页名称及下标
问题: 多工作表excel文件读取,获取文件中总共有多少个sheet页,及获取对应sheet页名称 代码 import com.alibaba.excel.EasyExcel; import com. ...
- 4. java使用easyexcel导入excel-多个sheet页、每个sheet页存在多个表头导入的情况、踩坑记录、可在线拉取成品demo、也可参详详细演示流程、贴心手把手操作
文章目录 1.EXCEL模板数据格式.导入结果展示 2.避坑防雷招待所[♥] 2.1.与poi-Jar包文件版本冲突 2.2.传入后台读取文件流报空指针 3.在线获取代码及模板 3.1.Github获 ...
- python 创建excel,操作excel,保存excel,修改excel,删除sheet页
from openpyxl import Workbook #该包可进行excel相关的操作 import time import datetime import locale #支持中文日期loca ...
- easyExcel多sheet页导入
/*** Description: 获取日前交易excel数据** @param file* @return*/ private Map<String,List<SpotDailyDeal ...
最新文章
- volatile: 多线程程序员最好的朋友
- canvas绘制正文形并填充-2
- origin如何绘制双y轴曲线_Origin用矩阵绘制多层曲面映射图
- WinForm中使用AnyCAD三维控件 の 初始化
- 飞鸽传书不能传送文件
- Excel文件读取的两种方式
- 13. 星际争霸之php设计模式--正面模式
- class unity 定义类_【Unity学习笔记】C#基础-类(Classes)
- html可编辑下拉选项卡,bootstrap可编辑下拉框jquery.editable-select
- 基于RV1126平台imx291分析 --- rkcif_mipi注册
- 字体主题宝库:25款很好看的液晶数字字体下载
- 光纤光缆那些纤常识【华光昱能光知识】
- linux火狐快捷键设置,使用火狐浏览器所有的快捷键大全
- 【ES6】ES6简介,ES6常用操作,let 、var和const的区别,看完我写的ES6,马上会的,你就是高手
- 了解DPDK——内核NIC接口
- 云计算360度 微软专家纵论产业变革
- C# 在load构造函数设定dgv背景字体颜色无效 解决办法
- 关于Android应用开发的一些安全注意事项
- 计算机微博实验报告,网络信息交流的工具与模式(实验报告).doc
- Cesium深入浅出之如何获取帧率
热门文章
- 线性方程组在计算机方面的应用,在线性方程组的简单应用》(安顺学院数学和计算机科.doc...
- flex布局练习,仿手机淘宝首页
- oracle试算平衡表查询,试算平衡表
- 概述、 BGP AS 、BGP 邻居、 BGP 更新源 、BGP TTL 、BGP路由表、 BGP 同步
- Python小黄人绘制
- Python批量获取手机号码归属地(图文展示)
- Android Q 正式命名为 Android 10
- matlab 有一函数 _写一程序_输入自变量的值_输出函数值.,第2讲 MATLAB入门1_数学建模_ppt_大学课件预览_高等教育资讯网...
- C语言提取字符对应的ASCAl,ascall码对照表(ASCII码表)
- 《红警2》防空步兵都说了些什么?