EasyExcel导出Excel设置单元格文本格式(亲测有效)

EasyExcel的maven依赖, 注意版本问题, 我的是3.0+的版本

<dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>easyexcel</artifactId>
       <version>3.0.5</version>
</dependency>

下面是一开始的代码, 是不生效的, 查了好多都是这么设置的, 我也是这么写的但是就是不生效, 然后查了资料好多也说是注册写处理器必须是一个, 不能是多个, 因为我的是注册两个写处理器, 然后我就去掉了一个处理, 但是TMD还是不生效, 后来查了资料, 试了好几次, 终于可以生效了, 下面的写法应该是2.0版本的写法, 因为我的是3.0+, 没有验证这个2.0+是否生效, 就不多说了.

public class ExcelCellWriteHandler implements CellWriteHandler {

    @Override
    public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
        // 2.0 设置单元格为文本
        Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
        CellStyle cellStyle = workbook.createCellStyle();
        DataFormat dataFormat = workbook.createDataFormat();
        cellStyle.setDataFormat(dataFormat.getFormat("@"));
        cell.setCellStyle(cellStyle);
    }
}

生效解决方法1: 在作用字段或者类上作用@ContentStyle注解, 然后设置属性dataFormat = 49

/**
 * 直接作用到类上, 这种比较快捷
 * 看类BuiltinFormats定义的数组, 数组定义了所有的格式,
 * Excel单元格的文本格式就是对应数组里的"@"元素值, "@"元素值索引为49, 所以设置dataFormat = 49
 */
@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.LEFT, dataFormat = 49)

解决方法2: 看下面代码吧, 重写下面任意两个其中的一个方法就可以了, 写入注册几个写处理器都是可以的, 然后就可以导出试一下了.

public class ExcelCellWriteHandler implements CellWriteHandler {

    @Override
    public void afterCellDispose(CellWriteHandlerContext context) {
    	// 3.0 设置单元格为文本
        WriteCellData<?> cellData = context.getFirstCellData();
        WriteCellStyle writeCellStyle = cellData.getOrCreateStyle();
        DataFormatData dataFormatData = new DataFormatData();
        dataFormatData.setIndex((short) 49);
        writeCellStyle.setDataFormatData(dataFormatData);
    }


    @Override
    public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
        // 3.0 设置单元格为文本
        Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
        DataFormat dataFormat = workbook.createDataFormat();
        for (WriteCellData<?> writeCellData : cellDataList) {
            WriteCellStyle writeCellStyle = writeCellData.getOrCreateStyle();
            DataFormatData dataFormatData = new DataFormatData();
            dataFormatData.setIndex(dataFormat.getFormat("@"));
            writeCellStyle.setDataFormatData(dataFormatData);
        }
    }
}

导出的Excel就是文本的格式了

在这里插入图片描述

  • 13
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值