EasyExcel 单元格替换

目录

场景:Java写excel需要将查不到的数据字段用“-”代替

问题:字段为int类型,但是该字段需要接收“-”

思路1:修改字段类型为String,组装list时赋值为“-”(❌)

思路2:字段类型必须得是int类型,先写入,使用CellWriteHandler#afterCellDispos去替换

1)在单元格内设置公式:=IF(ISBLANK(D2),"-",D2)(❌)

 2)查询不到的赋值为-1,获取单元格内容小于0则赋值为“-”(✔)


场景:Java写excel需要将查不到的数据字段用“-”代替

实体类信息

public class XXX{
    。。。

    @ExcelProperty("预留量")
    private int reservedStock;

    。。。
}

easyexcel将实体类list写入excel实现

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
EasyExcelFactory.write(byteArrayOutputStream, HeadquartersAllocationExcelData.class).useDefaultStyle(false)
        .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
        .registerWriteHandler(new NonPhoneHeadquartersAllotCellWriteHandler())
        .sheet().doWrite(list);

问题:字段为int类型,但是该字段需要接收“-”

由于Java是强类型语言,只能是改为String类型。

思路1:修改字段类型为String,组装list时赋值为“-”(❌)

写入excel结果如下

可以看到,出现了很多小绿标。原因是本身数字的形式,但是是以字符串类型写入的,所以excel后台错误检查出的提醒。

影响可读性,不可行。

思路2:字段类型必须得是int类型,先写入,使用CellWriteHandler#afterCellDispos去替换

1)在单元格内设置公式:=IF(ISBLANK(D2),"-",D2)(❌)

查询不到的不写入,空单元格,设置公式

问题:excel不能在公式中引用自己,会出现循环引用,不可行。

 2)查询不到的赋值为-1,获取单元格内容小于0则赋值为“-”(✔)

实现如下

@Override
public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
                             List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
    if (cell.getRowIndex() == 0) {
        return;
    }

    int currRowIndex = cell.getRowIndex() + 1;
    //将查不到的值替换为"-"展示
    if (REPLACE_COLUMN.contains(cell.getColumnIndex()) && cell.getNumericCellValue() < 0) {
        cell.setCellValue("-");
    }
}

最终结果

 easyexcel了解以及其他使用场景

excel写为字节流使用base64加解密_zhangm2020的博客-CSDN博客

EasyExcel文件流使用_zhangm2020的博客-CSDN博客_easyexcel 开始行

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值