在 Excel 的选项设置中,用户可以自定义 千分位分隔符 和 小数点分隔符,以满足不同地区或特定业务需求。例如: - 英美等国家默认使用 , 作为千分位分隔符,. 作为小数点分隔符(如 1,234.56)。
- 部分欧洲国家使用 . 作为千分位,, 作为小数点(如 1.234,56)。
- 特定企业可能需要使用 - 作为千分位分隔符(如 1-234.56)。
在 SpreadJS 中,目前并没有内置的选项来更改这些系统分隔符。因此,我们需要通过 自定义格式化 方案,实现这一功能。
实现思路
SpreadJS 提供了 FormatterBase 类,可用于创建自定义格式化逻辑。我们可以利用这一功能创建数值字符串,替换千分位和小数点符号,使其符合用户需求。
以“ "-"作为千分位,", "作为小数点(如 1-234,56)”为例
1. 创建自定义数值格式化类 - function CustomNumberFormat() {}
- // 继承 SpreadJS 的 FormatterBase
- CustomNumberFormat.prototype = new GC.Spread.Formatter.FormatterBase();
- // 重写 format 方法
- CustomNumberFormat.prototype.format = function (obj, formattedData) {
- if (typeof obj === "number") {
- return formatNumber(obj, formattedData);
- } else if (typeof obj === "string") {
- if (Number.isFinite(+obj)) {
- return formatNumber(parseFloat(obj), formattedData);
- }
- }
- return obj ? obj.toString() : "";
- };
复制代码
其中的核心逻辑是 formatNumber 方法,它会调用 addThousandSeparator 进行千分位格式化,并确保小数点的正确显示。 具体代码如下 - function formatNumber(value, formattedData) {
- value = addThousandSeparator(value);
- return value.toString();
- }
复制代码添加千分位并替换小数位 - function addThousandSeparator(number) {
- // 转换为字符串,并确保小数点替换
- let numStr = number.toString().replace(".", ","); // 这里替换 `.` 为 `,`
- let [integer, decimal] = numStr.split(","); // 分割整数和小数部分
-
- // 添加千分位分隔符
- integer = integer.replace(/\B(?=(\d{3})+(?!\d))/g, "-"); // 这里的 `-` 可替换为所需的符号
-
- // 重新拼接数值
- if (decimal) {
- return integer + "," + decimal; // 小数点替换为 `,`
- } else {
- return integer;
- }
- }
复制代码
在 SpreadJS 中,我们可以将 CustomNumberFormat 作为格式化器应用到单元格或整个 Sheet。 - // 获取工作表
- var sheet = spread.getActiveSheet();
- // 应用自定义格式到 A 列
- for (var i = 1; i < 10; i++) {
- sheet.getCell(i, 0).formatter(new CustomNumberFormat());
- }
复制代码
最终效果
|