若依-@Excel新增注解numberFormat

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

想要的效果

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

还原过程

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

  • 找到EXCEL导出方法exportExcel()
  • 找到writeSheet,写表格的方法
  • 找到填充数据的方法fillExcelData
  • 找到添加单元格的方法addCell
  • 找到设置 单元格VO的方法 setCellVo

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

java 复制代码
    /**
     * 设置单元格信息
     *
     * @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中加上我们的自定义注解

java 复制代码
    /**
     * 数字类型格式
     */
    public String numberFormat() default "";

使用

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

java 复制代码
    /**
     * 总重
     */
    @Excel(name = "总重", cellType = Excel.ColumnType.NUMERIC, align = HorizontalAlignment.RIGHT,numberFormat = "#,##0.00")
    private BigDecimal totalWeight;
相关推荐
琉璃℡初雪36 分钟前
vue2/3 中使用 @vue-office/docx 在网页中预览(docx、excel、pdf)文件
vue.js·pdf·excel
河山入梦来19 小时前
Excel表的导入与导出
excel
wtsolutions1 天前
Excel-to-JSON插件专业版功能详解:让Excel数据转换更灵活
json·excel·excel-to-json·wtsolutions·专业版
梦幻通灵1 天前
Excel分组计算求和的两种实现方案
前端·excel
莫负初1 天前
Excel使用VBA批量计算指定列的中位数和标准差并筛选指定列数据
数据分析·自动化·excel·vba·方差·标准差
杜子腾dd2 天前
17.Excel:实用的 VBA 自动化程序
数据分析·自动化·excel
是孑然呀2 天前
【小记】excel vlookup一对多匹配
excel
chaodaibing2 天前
pandas读取pymysql和解析excel的一系列问题(版本不匹配)
excel·pandas
沉到海底去吧Go3 天前
【身份证识别表格】批量识别身份证扫描件或照片保存为Excel表格,怎么大批量将身份证图片转为excel表格?基于WPF和腾讯OCR的识别方案
ocr·wpf·excel·身份证识别表格·批量扫描件身份证转表格·图片识别表格·图片识别excel表格
a GISer doctor3 天前
EXCEL中嵌入其他表格等文件
excel