[alibaba/easyexcel]怎样设置单元格属性为文本格式?

2024-05-24 940 views
7

异常代码

 怎样设置单元格属性为文本格式? 导出的excel单元格属性 默认不是文本格式

异常提示 请提供完整的异常提示,记住是全部异常! 建议描述

回答

4

单元格为一长串的数字,默认成了科学计数法的数字。急急急!请教怎么设置单元格属性

3

单元格为一长串的数字,默认成了科学计数法的数字。急急急!请教怎么设置单元格属性

参考官方demo-自定义拦截器 cell.setCellType(CellType.STRING);

9

怎样设置呀?是在afterCellDispose 这个方法里面设置吗?

5

是的,afterCellDispose是每个单元格数据填充完之后会调用

4
@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();
       /* Hyperlink hyperlink = createHelper.createHyperlink(HyperlinkType.URL);
        hyperlink.setAddress("https://github.com/alibaba/easyexcel");
        cell.setHyperlink(hyperlink);*/
        //createHelper.createRichTextString(text)
        cell.setCellType(CellType.STRING);
    }
}

这样就可以了吗?demo 里面是CreationHelper ,我不知道这个干吗用的?

4

另外再请问一下,如果写了个自定义拦截器,是否还需要每个属性上面加自定义的converter,@ExcelProperty(value = "单据编号",converter = CustomStringStringConverter.class) private String billNo;

5

CreationHelper 是创建url的,converter用来转换数据的值的,看需要使用就可以了

3

你好,刚才参考你的方式试了一下,还是不行,首先我导出的java bean 属性,@ExcelProperty(value = "单据编号") private String billNo; (没有加converter 属性),其次我的自定义handler是这样写的,public class CustomCellWriteHandler implements CellWriteHandler {

private static final Logger LOGGER = LoggerFactory.getLogger(CustomCellWriteHandler.class);

@Override
public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row,
    Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {

}

@Override
public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell,
    Head head, Integer relativeRowIndex, Boolean isHead) {

}

@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) {
        cell.setCellType(CellType.STRING);
    }
}

} ,最后我的导出util,public class EasyExcelUtils {

public static  void  export2ExcelByOutputStream(OutputStream outputStream,List list,Class clazz){
    // 头的策略
    WriteCellStyle headWriteCellStyle = new WriteCellStyle();

    // 背景设置为白色
    headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
    WriteFont headWriteFont = new WriteFont();
    headWriteFont.setFontHeightInPoints((short)10);
    headWriteCellStyle.setWriteFont(headWriteFont);
    // 内容的策略
    WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
    // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定
    contentWriteCellStyle.setFillPatternType(FillPatternType.NO_FILL);
    // 背景白色
    contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
    WriteFont contentWriteFont = new WriteFont();
    // 字体大小
    contentWriteFont.setFontHeightInPoints((short)15);
    contentWriteCellStyle.setWriteFont(contentWriteFont);

    // 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
    HorizontalCellStyleStrategy horizontalCellStyleStrategy =new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);

    // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
    ExcelWriterSheetBuilder sheet = EasyExcel.write(outputStream,clazz).registerWriteHandler(horizontalCellStyleStrategy).registerWriteHandler(new CustomCellWriteHandler()).sheet("Sheet1");

    sheet.useDefaultStyle(false).doWrite(list);
}

} 导出excel 后,导出的那个字符串还是科学计数法表示。很头疼,方便加个微信或者qq 询问一下吗?

1

我这边根据你的代码都是正常的导出,并没有看到科学计数法,也许我的方式不对 excel是 1.xlsx 你打开看看这个文件,换用最新版easyExcel、换用最新版的office/wps

3

你的这个打开也是科学计数法,好像不能截图给你看。

2

这个是bug,后续版本会修复。现在建议默认自定义样式 设置dataformat=49

1

谢谢作者,刚才在群里已经为我解答了。非常感谢!

5

请问你是怎么设置成文本的,遇到同样的问题