[alibaba/easyexcel]如何才能到达冻结表头的效果?

2024-05-24 811 views
2

异常代码

   这里写你的代码

异常提示 请提供完整的异常提示,记住是全部异常! 建议描述

回答

6

这个也可以归结于自定义样式问题,不过这个特殊一点,请参照官方demo-自定义拦截器 具体的样式的操作请百度一下就知道了,我就不放链接了,关键词poi 冻结表头

CreateFreezePane的参数 第一个参数表示要冻结的列数; 第二个参数表示要冻结的行数,这里只冻结列所以为0; 第三个参数表示右边区域可见的首列序号,从1开始计算; 第四个参数表示下边区域可见的首行序号,也是从1开始计算,这里是冻结列,所以为0; 例:sheet.createFreezePane(1,2,1,2);

2

OK 实现了 谢谢

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 FreezeAndFilter 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));
    }
}

使用方法

        ExcelWriter writer = EasyExcel.write(outputStream).build();
        WriteSheet totalSheet = EasyExcel
                .writerSheet(1, "总分")
                .head(DownloadData.class)
                .registerWriteHandler(new FreezeAndFilter())
                .build();
        writer.write(Collections.singletonList(totalsData), totalSheet);
        writer.finish();
899 #874 #443 #625

有空加到例子代码里