请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

Richard.Ma 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2025-3-5 11:20  /   查看:59  /  回复:0
在 Excel 的选项设置中,用户可以自定义 千分位分隔符小数点分隔符,以满足不同地区或特定业务需求。例如:
  • 英美等国家默认使用 , 作为千分位分隔符,. 作为小数点分隔符(如 1,234.56)。
  • 部分欧洲国家使用 . 作为千分位,, 作为小数点(如 1.234,56)。
  • 特定企业可能需要使用 - 作为千分位分隔符(如 1-234.56)。


在 SpreadJS 中,目前并没有内置的选项来更改这些系统分隔符。因此,我们需要通过 自定义格式化 方案,实现这一功能。

实现思路
SpreadJS 提供了 FormatterBase 类,可用于创建自定义格式化逻辑。我们可以利用这一功能创建数值字符串,替换千分位和小数点符号,使其符合用户需求。

以“ "-"作为千分位,", "作为小数点(如 1-234,56)”为例

1. 创建自定义数值格式化类
  1. function CustomNumberFormat() {}

  2. // 继承 SpreadJS 的 FormatterBase
  3. CustomNumberFormat.prototype = new GC.Spread.Formatter.FormatterBase();

  4. // 重写 format 方法
  5. CustomNumberFormat.prototype.format = function (obj, formattedData) {
  6.     if (typeof obj === "number") {
  7.         return formatNumber(obj, formattedData);
  8.     } else if (typeof obj === "string") {
  9.         if (Number.isFinite(+obj)) {
  10.             return formatNumber(parseFloat(obj), formattedData);
  11.         }
  12.     }

  13.     return obj ? obj.toString() : "";
  14. };
复制代码

其中的核心逻辑是 formatNumber 方法,它会调用 addThousandSeparator 进行千分位格式化,并确保小数点的正确显示。
具体代码如下
  1. function formatNumber(value, formattedData) {
  2.     value = addThousandSeparator(value);
  3.     return value.toString();
  4. }
复制代码
添加千分位并替换小数位
  1. function addThousandSeparator(number) {
  2.     // 转换为字符串,并确保小数点替换
  3.     let numStr = number.toString().replace(".", ","); // 这里替换 `.` 为 `,`
  4.     let [integer, decimal] = numStr.split(","); // 分割整数和小数部分
  5.    
  6.     // 添加千分位分隔符
  7.     integer = integer.replace(/\B(?=(\d{3})+(?!\d))/g, "-"); // 这里的 `-` 可替换为所需的符号
  8.    
  9.     // 重新拼接数值
  10.     if (decimal) {
  11.         return integer + "," + decimal;  // 小数点替换为 `,`
  12.     } else {
  13.         return integer;
  14.     }
  15. }
复制代码

在 SpreadJS 中,我们可以将 CustomNumberFormat 作为格式化器应用到单元格或整个 Sheet。
  1. // 获取工作表
  2. var sheet = spread.getActiveSheet();  

  3. // 应用自定义格式到 A 列
  4. for (var i = 1; i < 10; i++) {
  5.     sheet.getCell(i, 0).formatter(new CustomNumberFormat());
  6. }
复制代码

最终效果
image.png812139282.png




0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部