From 6a7c448d55fcfae00bf5b5564ac4d78424e88565 Mon Sep 17 00:00:00 2001 From: LianTao Date: Tue, 30 Dec 2025 15:28:24 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8DExcel=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E7=9A=84BigDecimal=E5=9E=8B=E5=88=97=EF=BC=8C=E5=BD=93?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E4=BA=86=E4=BF=9D=E7=95=99=E5=B0=8F=E6=95=B0?= =?UTF-8?q?=E4=BD=8D=E6=95=B0=EF=BC=88scale=EF=BC=89=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E4=BC=9A=E5=9B=A0Excel=E6=8A=8A=E6=95=B0=E5=AD=97=E6=B8=B2?= =?UTF-8?q?=E6=9F=93=E6=88=90=E6=97=A5=E6=9C=9F=EF=BC=8C=E8=80=8C=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E6=98=BE=E7=A4=BA=E6=88=90=E6=97=A5=E6=9C=9F=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java index 15cb04bca..348236ba6 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java @@ -1171,7 +1171,7 @@ public class ExcelUtil } else if (value instanceof BigDecimal && -1 != attr.scale()) { - cell.setCellValue((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).doubleValue()); + cell.setCellValue(Convert.toStr((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).doubleValue())); } else if (!attr.handler().equals(ExcelHandlerAdapter.class)) { From 4e1d0dd30a09416b9c3dd37cc1fbc02edaa8ef4e Mon Sep 17 00:00:00 2001 From: LianTao Date: Tue, 21 Apr 2026 15:57:35 +0800 Subject: [PATCH 2/2] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8DExcel=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E5=80=BC=E5=9E=8B=E5=88=97=EF=BC=8C=E5=BD=93?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E4=BA=86=E4=BF=9D=E7=95=99=E5=B0=8F=E6=95=B0?= =?UTF-8?q?=E4=BD=8D=E6=95=B0=EF=BC=88scale=EF=BC=89=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E4=BC=9A=E5=9B=A0Excel=E6=8A=8A=E6=95=B0=E5=AD=97=E6=B8=B2?= =?UTF-8?q?=E6=9F=93=E6=88=90=E6=97=A5=E6=9C=9F=EF=BC=8C=E8=80=8C=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E6=98=BE=E7=A4=BA=E6=88=90=E6=97=A5=E6=9C=9F=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E3=80=82=202.=E5=A2=9E=E5=8A=A0=E6=95=B0?= =?UTF-8?q?=E5=80=BC=E5=9E=8B=EF=BC=88=E5=8C=85=E6=8B=ACint=E3=80=81long?= =?UTF-8?q?=E3=80=81double=E3=80=81BigInteger=E3=80=81BigDecimal=E7=AD=89?= =?UTF-8?q?=E5=9E=8B=EF=BC=89=E5=88=97=E7=9A=84=E5=8D=83=E5=88=86=E4=BD=8D?= =?UTF-8?q?=E9=80=97=E5=8F=B7=E6=A0=BC=E5=BC=8F=E5=8C=96=EF=BC=8C=E5=8C=85?= =?UTF-8?q?=E6=8B=AC=E5=B0=8F=E6=95=B0=E7=9A=84=E7=B1=BB=E5=9E=8B=EF=BC=88?= =?UTF-8?q?double=E3=80=81BigDecimal=E7=AD=89=EF=BC=89=E6=A0=B9=E6=8D=AEsc?= =?UTF-8?q?ale=E6=8C=87=E5=AE=9A=E7=9A=84=E5=B0=8F=E6=95=B0=E4=BD=8D?= =?UTF-8?q?=E6=95=B0=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/common/utils/poi/ExcelUtil.java | 77 ++++++++++++++++++- 1 file changed, 74 insertions(+), 3 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java index 348236ba6..62a4963eb 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java @@ -9,6 +9,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.math.BigDecimal; +import java.math.BigInteger; import java.text.DecimalFormat; import java.time.LocalDate; import java.time.LocalDateTime; @@ -1029,11 +1030,35 @@ public class ExcelUtil } cell.setCellValue(StringUtils.isNull(cellValue) ? attr.defaultValue() : cellValue + attr.suffix()); } - else if (ColumnType.NUMERIC == attr.cellType()) + else if (ColumnType.NUMERIC == attr.cellType()) // String型但却又cellType为NUMERIC,则将字符串转为数字 { if (StringUtils.isNotNull(value)) { - cell.setCellValue(StringUtils.contains(Convert.toStr(value), ".") ? Convert.toDouble(value) : Convert.toInt(value)); + String numStr = Convert.toStr(value); + boolean hasDecimal = StringUtils.contains(numStr, "."); + + if (hasDecimal) + { + Double doubleVal = Convert.toDouble(value); + int scale = attr.scale(); + StringBuilder patternBuilder = new StringBuilder("#,##0"); + if (scale >= 0) + { + patternBuilder.append('.'); + for (int i = 0; i < scale; i++) + { + patternBuilder.append('0'); + } + } + DecimalFormat df = new DecimalFormat(patternBuilder.toString()); + cell.setCellValue(df.format(doubleVal)); + } + else + { + Long longVal = Convert.toLong(value); + DecimalFormat df = new DecimalFormat("#,##0"); + cell.setCellValue(df.format(longVal)); + } } } else if (ColumnType.IMAGE == attr.cellType()) @@ -1171,7 +1196,53 @@ public class ExcelUtil } else if (value instanceof BigDecimal && -1 != attr.scale()) { - cell.setCellValue(Convert.toStr((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).doubleValue())); + //数值格式化 + BigDecimal bdValue = (BigDecimal) value; + BigDecimal scaledValue = bdValue.setScale(attr.scale(), attr.roundingMode()); + StringBuilder patternBuilder = new StringBuilder("#,##0"); + if (attr.scale() > 0) + { + patternBuilder.append('.'); + } + for (int i = 0; i < attr.scale(); i++) + { + patternBuilder.append('0'); + } + DecimalFormat df = new DecimalFormat(patternBuilder.toString()); + cell.setCellValue(df.format(scaledValue)); + } + else if (value instanceof BigInteger) + { + BigInteger bigIntValue = (BigInteger) value; + DecimalFormat df = new DecimalFormat("#,##0"); + cell.setCellValue(df.format(bigIntValue)); + } + else if (value instanceof Number && !(value instanceof BigDecimal)) + { + Number numValue = (Number) value; + String numStr = numValue.toString(); + boolean hasDecimal = StringUtils.contains(numStr, "."); + + if (hasDecimal) + { + int scale = attr.scale(); + StringBuilder patternBuilder = new StringBuilder("#,##0"); + if (scale >= 0) + { + patternBuilder.append('.'); + for (int i = 0; i < scale; i++) + { + patternBuilder.append('0'); + } + } + DecimalFormat df = new DecimalFormat(patternBuilder.toString()); + cell.setCellValue(df.format(numValue.doubleValue())); + } + else + { + DecimalFormat df = new DecimalFormat("#,##0"); + cell.setCellValue(df.format(numValue.longValue())); + } } else if (!attr.handler().equals(ExcelHandlerAdapter.class)) {