[alibaba/easyexcel]CSV文件导出,注册Sheet处理器,设置单元格格式为文本,没有效果

2023-04-21 815 views
8
触发场景描述

1、只能使用csv 2、动态头,无法使用Java类及注解写入 3、EasyExcel-3.1.1版本 4、导出文件【长字符串的数字被转成了科学计数法,所以想通过转换单元格格式为文本来解决】

触发Bug的代码
   /**
     * 生成文件模板,写入流
     * @param os OutputStream
     * @param type 文件类型 CSV-固定不变
     */
    public void writeTemplate(OutputStream os, ExcelTypeEnum type) throws IOException {
        EasyExcel.write(os).head(userFileContext.getHead())
                .excelType(type)
                .sheet()
                .registerWriteHandler(new CustomSheetWriteHandler())
                .doWrite(Collections.emptyList());
        os.close();
    }
public class CustomSheetWriteHandler extends AbstractColumnWidthStyleStrategy implements SheetWriteHandler {

    @Override
    public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
        Sheet sheet = writeSheetHolder.getSheet();
        //设置前100列的单元格格式为文本
        for (int i = 0; i < 100; i++) {
            CellStyle cellStyle = writeWorkbookHolder.getCachedWorkbook().createCellStyle();
            cellStyle.setDataFormat((short) 49);
            sheet.setDefaultColumnStyle(i, cellStyle);
        }
    }

    @Override
    protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<WriteCellData<?>> cellDataList,
                                  Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
        Sheet sheet = writeSheetHolder.getSheet();
        sheet.setColumnWidth(cell.getColumnIndex(), 5000);
    }
}
提示的异常或者没有达到的效果

1、导出数据,长字符串数字被转为了科学计数法 2、Sheet的前100列的所有单元格格式没有转换为文本 image

回答

6

这是excel的问题,不是导出的问题,你用其他内容打开这个csv就正常了. csv默认全是字符,建议查询"wps/excel 不使用科学计数法显示"

0

不知道您是否已经解决该问题?我们先暂时关闭这个问题,如果还存在问题请重新Reopen这个issue

6

不知道您是否已经解决该问题?我们先暂时关闭这个问题,如果还存在问题请重新Reopen这个issue

为什么我使用xlsx的Excel格式,导出的文件单元格格式是文本,只有csv不行。应该不仅仅是预览的问题吧,有可解决的方案么 【x l sx或者xls】 image

【csv】 image

8

你可以尝试用文本编译器打开这个csv 应该能看到内容是正常的