工作需求,本没要求冻结首行,但是个人比较习惯冻结,所以想增加这个功能。
前言
本站找到了一篇实现的功能更加丰富的文档,暂无心研究,后续再看
EasyExcel 实现冻结行和列
简化版-此次引用
EasyExcel 筛选和冻结固定表头
参数解释
EasyExcel 固定(冻结)单元格
提示:以下是本篇文章正文内容,下面案例可供参考
一、借花献佛,优化代码展示
1.1 构建sheet调用过滤器
ExcelWriter writer = EasyExcel.write(outputStream).build();
WriteSheet totalSheet = EasyExcel.writerSheet(1, "总分")
.head(DownloadData.class)
.registerWriteHandler(new FreezeAndFilterHandler())
.build();
writer.write(Collections.singletonList(totalsData), totalSheet);
writer.finish();
1.2 定义过滤器
import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
public class FreezeAndFilterHandler implements SheetWriteHandler {
public int colSplit = 0, rowSplit = 1, leftmostColumn = 0, topRow = 1;
public String autoFilterRange = "1:1";
@Override
public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
}
@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
Sheet sheet = writeSheetHolder.getSheet();
sheet.createFreezePane(colSplit, rowSplit, leftmostColumn, topRow);
sheet.setAutoFilter(CellRangeAddress.valueOf(autoFilterRange));
}
}
二、参数解释和示例
四个参数分别代表:
cellNum:表示要冻结的列数;
rowNum:表示要冻结的行数;
firstCellNum:表示被固定列右边第一列的列号;
firstRollNum :表示被固定行下边第一列的行号;
举例:
CreateFreezePane(0,1,0,1):冻结第一行,冻结行下侧第一行的左边框显示“2”
CreateFreezePane(1,0,1,0):冻结第一列,冻结列右侧的第一列为B列
CreateFreezePane(2,0,5,0):冻结左侧两列,冻结列右侧的第一列为F列