alibaba / easyexcel

快速、简洁、解决大文件内存溢出的java处理Excel工具
https://easyexcel.opensource.alibaba.com
Apache License 2.0
32.09k stars 7.5k forks source link

用模板填充怎么更改 sheet 名称 #3897

Closed mlb0925 closed 2 months ago

mlb0925 commented 2 months ago

更改不了 sheetname 名称

excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build();
            WriteSheet writeSheet = EasyExcel.writerSheet(0,"非合同制").build();
            FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();
            excelWriter.fill(new FillWrapper("user", schedule), fillConfig, writeSheet);
            FillConfig fillConfig2 = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
            excelWriter.fill( schedule, fillConfig2, writeSheet);
            Map<String, Object> workerData2 = new HashMap<>();
            workerData2.put("dept", userList.get(0).getDeptName());
            workerData2.put("count", userList2.get(0).getIsOffDay());
            workerData2.put("month",result);
            workerData2.put("update_by",loginUser.getUser().getNickName());
            workerData2.put("dates",formattedDate);
            excelWriter.fill(workerData2, writeSheet);
            // 打印结果以检查
            for (Map<String, String> map : schedule) {
                System.out.println(map);
            }

            // 关闭 ExcelWriter
            excelWriter.finish(); // 使用 finish() 来关闭资源
mlb0925 commented 2 months ago

感谢谢钉钉群提供的意见 @是仪 自定义拦截器试试 然后百度己解决

WriteSheet writeSheet= EasyExcel.writerSheet(0).registerWriteHandler(new CustomTemplateSheetStrategy("动态命名sheet")).build();

定义的栏截器

import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;

/**
 * 自定义模板导出sheet拦截器
 */
public class CustomTemplateSheetStrategy implements SheetWriteHandler {

    private Integer sheetNo;

    private String sheetName;

    public CustomTemplateSheetStrategy(String sheetName) {
        this.sheetName = sheetName;
    }

    public CustomTemplateSheetStrategy(Integer sheetNo, String sheetName) {
        this.sheetNo = sheetNo;
        this.sheetName = sheetName;
    }

    @Override
    public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
    }

    /**
     * 功能:动态修改模板中sheet的名称
     * sheet创建完成后调用
     * @param writeWorkbookHolder
     * @param writeSheetHolder
     */
    @Override
    public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
        if (sheetName == null) {
            return;
        }
        if (sheetNo == null) {
            sheetNo = 0;
        }
        writeWorkbookHolder.getCachedWorkbook().setSheetName(sheetNo, sheetName);
    }
}