填充Excel时 设置写出Excel的样式没法设置
实现CellWriteHandler和RowWriteHandler均无法实现
只能设置行高
边框设置无法实现 1.实现RowWriteHandler 任何方法没法实现增加边框 2.使用CellWriteHandler afterCellDispose方法能实现增加部分数据边框 不知道什么原因 出来的文件有问题
填充Excel时 设置写出Excel的样式没法设置
实现CellWriteHandler和RowWriteHandler均无法实现
只能设置行高
边框设置无法实现 1.实现RowWriteHandler 任何方法没法实现增加边框 2.使用CellWriteHandler afterCellDispose方法能实现增加部分数据边框 不知道什么原因 出来的文件有问题
参考官方demo-自定义样式 试过了 用自定义样式也不行 我是用模板填充 不是写入 我怀疑填充excel时 模板excel样式覆盖了自定义的样式
参考官方demo-自定义样式 试过了 用自定义样式也不行 我是用模板填充 不是写入 我怀疑填充excel时 模板excel样式覆盖了自定义的样式
@Override
public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
// 这里可以对cell进行任何操作
LOGGER.info("第{}行,第{}列写入完成。", cell.getRowIndex(), cell.getColumnIndex());
if (!isHead && cell.getColumnIndex() == 0) {
//CreationHelper createHelper = writeSheetHolder.getSheet().getWorkbook().getCreationHelper();
final CellStyle cellStyle = cell.getCellStyle();
cellStyle.setBorderBottom(BorderStyle.THIN);
cellStyle.setBorderTop(BorderStyle.THIN);
}
}
测试类
@Test
public void testCustomBorder() throws IOException {
final ClassPathResource resource = new ClassPathResource("excel/customBorder.xlsx");
EasyExcel.write(fileName)
.withTemplate(resource.getInputStream())
.registerWriteHandler(new CustomBorderCellWriteHandler())
.sheet()
.doFill(demoData());
}
模板
填充结果: 我的测试结果是样式设置成功的,应该不是样式设置的问题,你可以先去掉设置样式部分的代码调试看看,应该是其他部分的问题
参考官方demo-自定义样式 试过了 用自定义样式也不行 我是用模板填充 不是写入 我怀疑填充excel时 模板excel样式覆盖了自定义的样式
参考官方demo-自定义样式 试过了 用自定义样式也不行 我是用模板填充 不是写入 我怀疑填充excel时 模板excel样式覆盖了自定义的样式
@Override public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { // 这里可以对cell进行任何操作 LOGGER.info("第{}行,第{}列写入完成。", cell.getRowIndex(), cell.getColumnIndex()); if (!isHead && cell.getColumnIndex() == 0) { //CreationHelper createHelper = writeSheetHolder.getSheet().getWorkbook().getCreationHelper(); final CellStyle cellStyle = cell.getCellStyle(); cellStyle.setBorderBottom(BorderStyle.THIN); cellStyle.setBorderTop(BorderStyle.THIN); } }
测试类
@Test public void testCustomBorder() throws IOException { final ClassPathResource resource = new ClassPathResource("excel/customBorder.xlsx"); EasyExcel.write(fileName) .withTemplate(resource.getInputStream()) .registerWriteHandler(new CustomBorderCellWriteHandler()) .sheet() .doFill(demoData()); }
模板
填充结果: 我的测试结果是样式设置成功的,应该不是样式设置的问题,你可以先去掉设置样式部分的代码调试看看,应该是其他部分的问题
我今天再试试 我昨天用你那种方式能增加部分边框 大概30多个cell增加了 剩下的没增加 就出现了 有几行有边框 有几行没有
参考官方demo-自定义样式 试过了 用自定义样式也不行 我是用模板填充 不是写入 我怀疑填充excel时 模板excel样式覆盖了自定义的样式
@Override public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { // 这里可以对cell进行任何操作 LOGGER.info("第{}行,第{}列写入完成。", cell.getRowIndex(), cell.getColumnIndex()); if (!isHead && cell.getColumnIndex() == 0) { //CreationHelper createHelper = writeSheetHolder.getSheet().getWorkbook().getCreationHelper(); final CellStyle cellStyle = cell.getCellStyle(); cellStyle.setBorderBottom(BorderStyle.THIN); cellStyle.setBorderTop(BorderStyle.THIN); } }
测试类
@Test public void testCustomBorder() throws IOException { final ClassPathResource resource = new ClassPathResource("excel/customBorder.xlsx"); EasyExcel.write(fileName) .withTemplate(resource.getInputStream()) .registerWriteHandler(new CustomBorderCellWriteHandler()) .sheet() .doFill(demoData()); }
模板
填充结果: 我的测试结果是样式设置成功的,应该不是样式设置的问题,你可以先去掉设置样式部分的代码调试看看,应该是其他部分的问题
又测试了下 模板和输出都是xls格式的话
结果是这样的
但是如果是xlsx格式的话 结果就正常了
感觉不是生成问题,而是xls格式的样式数量到上限了(63个数据应用了样式+1个头部样式) 但是我测试中并没有复现这个问题,
感觉不是生成问题,而是xls格式的样式数量到上限了(63个数据应用了样式+1个头部样式) 但是我测试中并没有复现这个问题,
- 推荐你测试一下样式复用。
- 推荐你测试一下修改样式,而不是新建样式。
- 还有fill的话会自动使用填充列的样式,没有特殊需求的话不必手动更改,预先设置好就可以了,不用修改
好的 测试了下 如果不是新建的话 可以修改成功 fill的话自动使用填充列的样式 但是如果数据为空的话 会有一个空值列带着样式 和预期不一样 如果是空值建议把空值列的样式去掉
感觉不是生成问题,而是xls格式的样式数量到上限了(63个数据应用了样式+1个头部样式) 但是我测试中并没有复现这个问题,
- 推荐你测试一下样式复用。
- 推荐你测试一下修改样式,而不是新建样式。
- 还有fill的话会自动使用填充列的样式,没有特殊需求的话不必手动更改,预先设置好就可以了,不用修改
好的 测试了下 如果不是新建的话 可以修改成功 fill的话自动使用填充列的样式 但是如果数据为空的话 会有一个空值列带着样式 和预期不一样 如果是空值建议把空值列的样式去掉
空值不要样式这种业务我觉得不太统一,对于这种自定义一个清除样式好了^_^