alibaba / easyexcel

快速、简洁、解决大文件内存溢出的java处理Excel工具

Home Page:https://easyexcel.opensource.alibaba.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

【csv写入】sheetname设置无效

Xikl opened this issue · comments

version

3.3.4

触发场景描述

进行csv写入,设置了sheetname 但是最终生成出来的却不是自己的sheetname,看了下代码应该是以下这里有点问题,

// com.alibaba.excel.context.WriteContextImpl#createSheet
 private Sheet createSheet() {
        if (LOGGER.isDebugEnabled()) {
            LOGGER.debug("Can not find sheet:{} ,now create it", writeSheetHolder.getSheetNo());
        }
       
        // 这里仅仅当sheetname为空的时候才会将sheetno赋值到sheetname中,其它的情况却没有赋值没有进行赋值
        if (StringUtils.isEmpty(writeSheetHolder.getSheetName())) {
            writeSheetHolder.setSheetName(writeSheetHolder.getSheetNo().toString());
        }
        Sheet currentSheet =
            WorkBookUtil.createSheet(writeWorkbookHolder.getWorkbook(), writeSheetHolder.getSheetName());
        writeSheetHolder.setCachedSheet(currentSheet);
        return currentSheet;
    }

触发Bug的代码

List<List<String>> data = Stream.of(
            Stream.of("d1", "d2", "d3").collect(Collectors.toList()),
            Stream.of("走", "d2", "d3").collect(Collectors.toList()),
            Stream.of("d1", "d2啥", "d3").collect(Collectors.toList()),
            Stream.of("d1", "d2", "d3的").collect(Collectors.toList())
        ).collect(Collectors.toList());

        List<List<String>> head = Stream.of(
                Stream.of("c1").collect(Collectors.toList()),
                Stream.of("c2").collect(Collectors.toList()),
                Stream.of("c3").collect(Collectors.toList())
        ).collect(Collectors.toList());



        EasyExcel.write("/Users/xx/Desktop/test_xxx_20240408.csv")
                .head(head)
                .excelType(ExcelTypeEnum.CSV)
                .charset(StandardCharsets.UTF_8)
                .sheet(0, "Sheet1")
                .doWrite(data);

解决方式

修改com.alibaba.excel.context.WriteContextImpl#createSheet的代码,赋值自己的sheetname