当前位置: 首页 > news >正文

若依-@Excel新增注解numberFormat

@Excel注解中原本的scale会四舍五入小数,导致进度丢失

在这里插入图片描述

想要的效果

  • 显示的时候保留两个小数
  • 真正的数值是保留之前的数值

在这里插入图片描述

还原过程

若以中有一個專門的工具类,用来处理excel的

在这里插入图片描述

  • 找到EXCEL导出方法exportExcel()
  • 找到writeSheet,写表格的方法
  • 找到填充数据的方法fillExcelData
  • 找到添加单元格的方法addCell
  • 找到设置 单元格VO的方法 setCellVo在这里插入图片描述

在这里插入图片描述

对于NUMBERIC类型的,但是设置format的属性值

    /**
     * 设置单元格信息
     *
     * @param value 单元格值
     * @param attr  注解相关
     * @param cell  单元格信息
     */
    public void setCellVo(Object value, Excel attr, Cell cell) {
        if (ColumnType.STRING == attr.cellType()) {
            String cellValue = Convert.toStr(value);
            // 对于任何以表达式触发字符 =-+@开头的单元格,直接使用tab字符作为前缀,防止CSV注入。
            if (StringUtils.startsWithAny(cellValue, FORMULA_STR)) {
                cellValue = RegExUtils.replaceFirst(cellValue, FORMULA_REGEX_STR, "\t$0");
            }
            if (value instanceof Collection && StringUtils.equals("[]", cellValue)) {
                cellValue = StringUtils.EMPTY;
            }
            cell.setCellValue(StringUtils.isNull(cellValue) ? attr.defaultValue() : cellValue + attr.suffix());
        } else if (ColumnType.NUMERIC == attr.cellType()) {
            if (StringUtils.isNotNull(value)) {
                if (StringUtils.isNotEmpty(attr.numberFormat())) {
                    CellStyle numberCellStyle = cell.getCellStyle();
                    DataFormat dataFormat = this.wb.createDataFormat();
                    numberCellStyle.setDataFormat(dataFormat.getFormat(attr.numberFormat()));
                    cell.setCellStyle(numberCellStyle);
                }
                cell.setCellValue(StringUtils.contains(Convert.toStr(value), ".") ? Convert.toDouble(value) : Convert.toInt(value));
            }
        } else if (ColumnType.IMAGE == attr.cellType()) {
            ClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, (short) cell.getColumnIndex(), cell.getRow().getRowNum(), (short) (cell.getColumnIndex() + 1), cell.getRow().getRowNum() + 1);
            String imagePath = Convert.toStr(value);
            if (StringUtils.isNotEmpty(imagePath)) {
                byte[] data = ImageUtils.getImage(imagePath);
                getDrawingPatriarch(cell.getSheet()).createPicture(anchor,
                        cell.getSheet().getWorkbook().addPicture(data, getImageType(data)));
            }
        }
    }

别忘了在注解@Excel中加上我们的自定义注解

在这里插入图片描述

    /**
     * 数字类型格式
     */
    public String numberFormat() default "";

使用

在对应的@Excel注解中,新增一个属性numberFormat

    /**
     * 总重
     */
    @Excel(name = "总重", cellType = Excel.ColumnType.NUMERIC, align = HorizontalAlignment.RIGHT,numberFormat = "#,##0.00")
    private BigDecimal totalWeight;

文章转载自:

http://r3GTPfN2.hxxwq.cn
http://L6o3yLiy.hxxwq.cn
http://OQD0GUHr.hxxwq.cn
http://6WhDm1Hg.hxxwq.cn
http://57xVR9Q0.hxxwq.cn
http://nMf263nW.hxxwq.cn
http://IHYqSAW6.hxxwq.cn
http://HWncQuOC.hxxwq.cn
http://4w4v0eIm.hxxwq.cn
http://3ZqLNkZY.hxxwq.cn
http://XQvnK1Pn.hxxwq.cn
http://dI1EwHuT.hxxwq.cn
http://HH2YLT4B.hxxwq.cn
http://87YovW2Q.hxxwq.cn
http://LYk0G9LK.hxxwq.cn
http://G9gL1Kcu.hxxwq.cn
http://j8AkHjx8.hxxwq.cn
http://Glg8NSHA.hxxwq.cn
http://veJMhvhh.hxxwq.cn
http://g4obtEMQ.hxxwq.cn
http://HbJ893aU.hxxwq.cn
http://he8MxpOr.hxxwq.cn
http://pDfTXTGn.hxxwq.cn
http://tQteToib.hxxwq.cn
http://a2A096AO.hxxwq.cn
http://f9xzgElB.hxxwq.cn
http://FjTafhWx.hxxwq.cn
http://D5liFYRV.hxxwq.cn
http://QIYtK9P8.hxxwq.cn
http://5W1rYhfr.hxxwq.cn
http://www.dtcms.com/a/27490.html

相关文章:

  • 【SFRA】笔记
  • 【可实战】Linux 常用统计命令:排序sort、去重uniq、统计wc
  • idea连接gitee完整教程
  • 精通特征选择:过滤器方法提升机器学习模型的技巧
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • docker中pull hello-world的时候出现报错
  • javaSE学习笔记20-线程(thread)的状态以及控制
  • Day6 25/2/19 WED
  • Win10下安装 Redis
  • ssh免密登录配置
  • 【前端】使用WebStorm创建第一个项目
  • 【笑着写算法系列】位运算
  • Python常见面试题的详解13
  • Linux | 进程控制(进程终止与进程等待)
  • 鱼皮面试鸭30天后端面试营
  • MySQL 如何使用EXPLAIN工具优化SQL
  • 知识拓扑-xmind
  • 第四章:高级特性与最佳实践 - 第三节 - Tailwind CSS 性能优化策略
  • QSNCTF-WEB做题记录
  • Android Hal AIDL 简介 (一)
  • Android 应用 A 通过 aidl 主动向应用 B 发送数据示例
  • 学习next.js的同时的一些英语单词记录
  • Rust编程语言入门教程(一)安装Rust
  • 啥是CTF?新手如何入门CTF?网络安全零基础入门到精通实战教程!
  • 大数据 高并发 解决方案 Moebius
  • [c语言日寄]指针进阶:函数指针数组——转换表
  • FFmpeg 源码编译安装
  • 基于微信小程序的民宿短租系统设计与实现(ssm论文源码调试讲解)
  • 【C】栈的应用
  • javaweb + AI day 02