easyexcel
easyexcel copied to clipboard
同一sheet写入多个table,分别为table设置header并设置relativeHeadRowIndex属性后,第一个表头与内容之间也会出现偏移
同一sheet写入多个table,分别为table设置header并设置relativeHeadRowIndex属性后,第一个表头与内容之间也会出现偏移
代码为提供的测试代码的基础上修改
@Test
public void tableWrite() {
String fileName = TestFileUtil.getPath() + "tableWrite" + System.currentTimeMillis() + ".xlsx";
// 方法1 这里直接写多个table的案例了,如果只有一个 也可以直一行代码搞定,参照其他案
// 这里 需要指定写用哪个class去写
try (ExcelWriter excelWriter = EasyExcel.write(fileName).build()) {
// 把sheet设置为不需要头 不然会输出sheet的头 这样看起来第一个table 就有2个头了
WriteSheet writeSheet = EasyExcel.writerSheet("模板").needHead(Boolean.FALSE).build();
// 这里必须指定需要头,table 会继承sheet的配置,sheet配置了不需要,table 默认也是不需要
WriteTable writeTable0 = EasyExcel.writerTable(0).relativeHeadRowIndex(3).needHead(Boolean.TRUE).head(this.head()).build();
WriteTable writeTable1 = EasyExcel.writerTable(1).relativeHeadRowIndex(3).needHead(Boolean.TRUE).head(this.head()).build();
// 第一次写入会创建头
excelWriter.write(data(), writeSheet, writeTable0);
// 第二次写如也会创建头,然后在第一次的后面写入数据
excelWriter.write(data(), writeSheet, writeTable1);
}
}
复现bug如上所示,代码如下,第一个WriteTable 设置relativeHeadRowIndex的时候内容也会浮动
WriteTable writeTable0 = EasyExcel.writerTable(1)
.head(head(MediaTypeEnum.BROADCAST.getType()))
.registerWriteHandler(new SimpleColumnWidthStyleStrategy(20))
.registerWriteHandler(new CustomSheetWriteHandler(title,analysisContent))
.useDefaultStyle(true).relativeHeadRowIndex(2)
.needHead(Boolean.TRUE).build();
WriteTable writeTable1 = EasyExcel.writerTable(2)
.head(head(MediaTypeEnum.TELEVISION.getType()))
.relativeHeadRowIndex(1)
.needHead(Boolean.TRUE).build();
WriteTable writeTable2 = EasyExcel.writerTable(3)
.head(head(MediaTypeEnum.BLUE_MEDIA.getType()))
.needHead(Boolean.TRUE)
.relativeHeadRowIndex(1)
.build();
WriteTable writeTable3 = EasyExcel.writerTable(4)
.head(head(MediaTypeEnum.LEARN_POWER_COUNTRY.getType()))
.relativeHeadRowIndex(1)
.needHead(Boolean.TRUE).build();
WriteTable writeTable4 = EasyExcel.writerTable(5)
.head(head(MediaTypeEnum.NEWSPAPER.getType()))
.relativeHeadRowIndex(1)
.needHead(Boolean.TRUE)
.build();
ExcelWriter excelWriter = EasyExcel.write(fileName).build();
WriteSheet sheet = EasyExcel.writerSheet(0, "报表数据").build();
excelWriter.write(getTableDataLists(broadcastList), sheet, writeTable0);
excelWriter.write(getTableDataLists(televisionList), sheet, writeTable1);
excelWriter.write(getTableDataLists(excludeLearn), sheet, writeTable2);
excelWriter.write(getTableDataLists(containLearn), sheet, writeTable3);
excelWriter.write(getTableDataLists(newsPaperList), sheet, writeTable4);
//完成
excelWriter.finish();