easyExcel动态双行表头导出

生成类似以下样式的表格附件

 代码实现:

public static void tableWrite() {
        String fileName = "C://u/test.xlsx";
        // 方法1 这里直接写多个table的案例了,如果只有一个 也可以直一行代码搞定,参照其他案
        // 这里 需要指定写用哪个class去写
        ExcelWriter excelWriter = EasyExcel.write(fileName).build();

        // 标题样式
         WriteCellStyle headCellStyle = this.getHeadStyle();
         // 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
         HorizontalCellStyleStrategy strategy = new HorizontalCellStyleStrategy(headCellStyle, new WriteCellStyle());


        // 把sheet设置为不需要头 不然会输出sheet的头 这样看起来第一个table 就有2个头了
        WriteSheet writeSheet = EasyExcel.writerSheet(0)
          //设置自定义样式
        .registerWriteHandler(strategy).
         //设置自适应列宽
         registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.needHead(Boolean.FALSE).build();

        for (int i = 0; i < 6; i++) {
            // 这里必须指定需要头,table 会继承sheet的配置,sheet配置了不需要,table 默认也是不需要
            WriteTable writeTable0 = EasyExcel.writerTable(i).needHead(Boolean.TRUE)

        .head(head()).build();
            // 第一次写入会创建头
            excelWriter.write(dataList(), writeSheet, writeTable0);
        }
        excelWriter.finish();
    }

    private static List<List<String>> head() {
        List<List<String>> list = CollUtil.newArrayList();
        List<String> head0 = CollUtil.newArrayList();
        head0.add("id");
        List<String> head1 = CollUtil.newArrayList();
        head1.add("姓名");
        List<String> head2 = CollUtil.newArrayList();
        head2.add("年龄");
        list.add(head0);
        list.add(head1);
        list.add(head2);
        return list;
    }

    //可以直接循环加入表头
    private static List<List<String>> head2() {
        List<List<String>> list = CollUtil.newArrayList();
        String[] str = {"id", "名称","描述"};
        for (int i = 0; i < str.length; i++) {
            List<String> head = CollUtil.newArrayList();
            head.add(str[i]);
            list.add(head);
        }
        return list;
    }

    private static List<List<Object>> dataList() {
        List<List<Object>> list = CollUtil.newArrayList();
        for (int i = 0; i < 1; i++) {
            List<Object> data = CollUtil.newArrayList();
            data.add("字符串" + i);
            data.add(0.56);
            data.add(new Date());
            list.add(data);
        }
        return list;
    }


/**
     * 表头样式配置(根据自己实际情况进行删减,调整)
     *
     * @return
     */
    public static WriteCellStyle getHeadStyle() {
        // 头的策略
        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
        // 背景颜色
        headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
        headWriteCellStyle.setFillPatternType(FillPatternType.NO_FILL);
        // 字体
        WriteFont headWriteFont = new WriteFont();
        headWriteFont.setFontName("宋体");//设置字体名字
        headWriteFont.setFontHeightInPoints((short) 14);//设置字体大小
        headWriteFont.setBold(true);//字体加粗
        headWriteCellStyle.setWriteFont(headWriteFont); //在样式用应用设置的字体;
        // 样式
        headWriteCellStyle.setBorderBottom(BorderStyle.THIN);//设置底边框;
        headWriteCellStyle.setBottomBorderColor((short) 0);//设置底边框颜色;
        headWriteCellStyle.setBorderLeft(BorderStyle.THIN);  //设置左边框;
        headWriteCellStyle.setLeftBorderColor((short) 0);//设置左边框颜色;
        headWriteCellStyle.setBorderRight(BorderStyle.THIN);//设置右边框;
        headWriteCellStyle.setRightBorderColor((short) 0);//设置右边框颜色;
        headWriteCellStyle.setBorderTop(BorderStyle.THIN);//设置顶边框;
        headWriteCellStyle.setTopBorderColor((short) 0); //设置顶边框颜色;
        headWriteCellStyle.setWrapped(true);  //设置自动换行;
        headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);//设置水平对齐的样式为居中对齐;
        headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);  //设置垂直对齐的样式为居中对齐;
        headWriteCellStyle.setShrinkToFit(true);//设置文本收缩至合适

        return headWriteCellStyle;
    }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值