Excel神办公—【四】使用EasyExcel指定冻结行列操作
hello,你好呀,我是灰小猿,一个超会写bug的程序猿!
关于easyexcel技术我已经和大家介绍了几篇关于它的基础操作,所以尝试过easyexcel的小伙伴一定会感受到它在读写excel表格时的强大之处
其实使用easuexcel技术来读写excel文件的高端操作还有很多,今天我就来和大家分享第一个使用easyexcel来自定义单元格样式的操作——指定冻结工作表行列,
导入maven依赖
在使用easyexcel的时候需要在pom文件中导入所需依赖。
在这里需要注意,导入依赖的时候,一定要导入poi对03和07版本支持的两个依赖,否则在进行写入的时候会出错
<!--poi依赖03版本-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<!--poi依赖07版本-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<!--easyexcel依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
</dependency>
指定冻结行列操作
在easyexcel中指定冻结行列的操作需要写在过滤器中,并且将过滤器添加到要写入的工作表中才能生效。
实现SheetWriteHandler过滤器
SheetWriteHandler过滤器(处理器)的作用就是可以让我们自定义单元格的样式,我们常用的是其中的afterSheetCreate()方法,在该方法中,我们可以对当前所在的单元格进行样式的设置,
在过滤器中实现行列冻结
想要实现行列冻结,就需要在afterSheetCreate()方法中进行操作,该方法中有一个writeSheetHolder参数,表示当前写入表格的处理器,我们可以通过该处理器来获取到当前正在操作的sheet,
实现行列冻结的方法是createFreezePane(), 该方法有两种调用方式,源码如下:
void createFreezePane(int var1, int var2);
void createFreezePane(int var1, int var2, int var3, int var4);
第一种传入两个参数,含义是:
- var1 冻结的列数
- var2 冻结的行数
默认从第0行,第0列开始冻结,
第二种传入四个参数,含义是:
- var1 冻结的列数
- var2 冻结的行数
- var3 冻结后右边第一列的列号
- var4 冻结后下边第一行的行号 这种方法下冻结会更加的精确,
该方法在afterSheetCreate()下的具体使用如下:
/**
* 自定义固定冻结指定行列
*/
@Slf4j
public class CustomFreezeRowColHandlerUtil implements SheetWriteHandler {
@Override
public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
}
@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
// 获取到当前的sheet
Sheet sheet = writeSheetHolder.getSheet();
/**
* 执行冻结行列从操作,冻结第一行和第一列
* void createFreezePane(int var1, int var2, int var3, int var4);
* 第一个参数:冻结的列数
* 第二个参数:冻结的行数
* 第三个参数:冻结后第一列的列号
* 第四个参数:冻结后第一行的行号
*/
sheet.createFreezePane(1, 1, 1, 1);
log.info("执行冻结行列从操作成功!!!!!!!!");
}
}
}
但是在实际使用的过程中,以上这写法显然是不合理的,对于需要冻结的行和列,我们应该以参数的形式传递进去,并且对传递过来的值进行合法性判断,只有符合参数要求的行列,才能被执行冻结,
测试冻结行列过滤器
以上就已经实现了一个简单的冻结行列的过滤器,但是该过滤器只有在传递到对应的写入操作中才可以生效。具体代码如下:
@Test
public void test01() {
String fileName = FILEPATH + "test01.xlsx";
try {
EasyExcel.write(fileName)
.registerWriteHandler(new CustomHandler())
.head(head()).sheet().doWrite(data());
} catch (Exception e) {
e.printStackTrace();
}
}
上面的代码中head()和doWrite()方法传递进入的是表头的列表和数据的列表,我在这里没有写出,小伙伴们可以自己生成。
关于使用easyexcel来实现指定行列冻结的操作就和大家讲解到这里,有疑问的小伙伴们可以留言提出,\
我是灰小猿,我们下期间!
- 点赞
- 收藏
- 关注作者
评论(0)