[alibaba/easyexcel]RichTextString无效

2024-05-30 910 views
8

在CellWriteHandler的afterCellCreat()方法中,设置新建了RichTextString并设置了字体,但是为生效

`@Override public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, int relativeRowIndex, boolean isHead) { Font redFont = writeSheetHolder.getSheet().getWorkbook().createFont(); if(redFont instanceof XSSFFont) { XSSFRichTextString richString = new XSSFRichTextString("21213"); richString.applyFont(0, 1, redFont); cell.setCellValue(richString);

    }

}`

回答

1

如果自定义样式的话 请参照demo。这个需要使用poi的写法,请确认 写法是否有问题?

7

如果自定义样式的话 请参照demo。这个需要使用poi的写法,请确认 写法是否有问题?

@Test public void testRichTextString() throws IOException { XSSFWorkbook wb = new XSSFWorkbook(); XSSFSheet sheet = wb.createSheet(); XSSFRow row = sheet.createRow(0); XSSFCell cell = row.createCell(0); XSSFFont fontRed = wb.createFont(); fontRed.setColor(Font.COLOR_RED); XSSFRichTextString richString = new XSSFRichTextString("表头必填*"); richString.applyFont(richString.length() - 1, richString.length(), fontRed); cell.setCellValue(richString); FileOutputStream fos = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\test1.xlsx"); wb.write(fos); fos.close(); }

` @Test public void testRichTextStringEasyExcel() { EasyExcel.write("C:\Users\Administrator\Desktop\test2.xlsx", DemoData.class). registerWriteHandler(new CellWriteHandler() { @Override public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, int relativeRowIndex, boolean isHead) {

                }

                @Override
                public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, int relativeRowIndex, boolean isHead) {
                    if(isHead) {
                        Font fontRed = writeSheetHolder.getSheet().getWorkbook().createFont();
                        XSSFRichTextString richString = new XSSFRichTextString(cell.getStringCellValue());
                        richString.applyFont(richString.length() - 1, richString.length(), fontRed);
                        cell.setCellValue(richString);
                    }

                }
            }).
            sheet("模板").doWrite(data());
}

`

用poi的写法是生效的 image 但是easyexcel是不生效的, image 是不是有其他的配置

自定义样式无法满足需求,这边只需要将*设置为红色

9

是不是被表头样式给覆盖了??

8

你可以自定义表头样式。然后设置表头样式为null,试试。

7

你可以自定义表头样式。然后设置表头样式为null,试试。

` @Test public void testRichTextStringEasyExcel() { HorizontalCellStyleStrategy strategy = new HorizontalCellStyleStrategy(null, new WriteCellStyle());

    EasyExcel.write("C:\\Users\\Administrator\\Desktop\\test2.xlsx", DemoData.class).
            registerWriteHandler(strategy).
            registerWriteHandler(new CellWriteHandler() {
                @Override
                public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, int relativeRowIndex, boolean isHead) {

                }

                @Override
                public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, int relativeRowIndex, boolean isHead) {
                    if(isHead) {
                        Font fontRed = writeSheetHolder.getSheet().getWorkbook().createFont();
                        XSSFRichTextString richString = new XSSFRichTextString(cell.getStringCellValue());
                        richString.applyFont(richString.length() - 1, richString.length(), fontRed);
                        cell.setCellValue(richString);
                    }

                }
            }).
            sheet("模板").doWrite(data());
}

` 一样未生效 image

6

知道原因了 我们写用的是sxssf 模式 该模式不支持 richtextString,下个版本会可以自义定模式。但是xssf数据会全部在内存。这个问题 建议 用模板解决。

5

知道原因了 我们写用的是sxssf 模式 该模式不支持 richtextString,下个版本会可以自义定模式。但是xssf数据会全部在内存。这个问题 建议 用模板解决。 麻烦了

9

还有一个方案就是 升级到2.1.0-beta3以上,然后设置InMemory 为true,就可以使用了。但是这样都会在内存处理,大批量导出文件勿用。

4

还有一个方案就是 升级到2.1.0-beta3以上,然后设置InMemory 为true,就可以使用了。但是这样都会在内存处理,大批量导出文件勿用。

感谢耐心指导,刚试了下,没问题了,主要是用这个来做导入模板的生成,没有大文件