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

QQ登录

只需一步,快速开始

王公子-_-

注册会员

7

主题

27

帖子

94

积分

注册会员

积分
94
王公子-_-
注册会员   /  发表于:2025-4-15 17:16  /   查看:94  /  回复:13
1金币
本帖最后由 王公子-_- 于 2025-4-15 18:33 编辑

根据数值类字段保留小数位设置formatter,为单元格可以设置成功,但对列无效。
对单元格生效的同时,比如2位小数成功设置formatter为”0.00“, 发现输入12也会变成12.00, 想去除无效小数位,故设置了
sheet.conditionalFormats.addFormulaRule("=IF(MOD(A1,1),,A1)", integerStyle, [new GC.Spread.Sheets.Range(row, col, rowCount, colCount)]);
但是此方法对单元格无效,同时发现对表格列生效。
image.png363424681.png

最佳答案

查看完整内容

需要与您确认下需求是否如下: 对于单元格的值,如果值为整数(如12),则不显示小数位数。如果值为小数,则保留两位小数。 如果是,可直接在单元格设置如下条件格式,无需另外设置formatter: 示例效果如下:

13 个回复

倒序浏览
最佳答案
最佳答案
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2025-4-15 17:16:14
来自 3#
需要与您确认下需求是否如下:
对于单元格的值,如果值为整数(如12),则不显示小数位数。如果值为小数,则保留两位小数。
如果是,可直接在单元格设置如下条件格式,无需另外设置formatter:
  1. const cfs = sheet.conditionalFormats;
  2. const style = new GC.Spread.Sheets.Style();
  3. style.formatter = "0.00";
  4. // 条件格式应用的区域为:A列
  5. const ranges = [new GC.Spread.Sheets.Range(-1, 0, -1, 1)];
  6. cfs.addFormulaRule("=A1<>INT(A1)", style, ranges);
复制代码
示例效果如下:
image.png262485045.png
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2025-4-15 18:01:45
2#
您好,
问题收到,先根据您提供的信息理解下此问题,有后续再与您交流。
回复 使用道具 举报
王公子-_-
注册会员   /  发表于:7 天前
4#
想要去除无效小数位,比如12.600 显示12.6
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:7 天前
5#
了解,需要进一步调研下方案,有结果会同步您。
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:6 天前
6#
那您的需求应调整如下:
对于单元格的值,如果值为整数(如12),则不显示小数位数。
如果值为小数,则显示有效小数位数。
如果是,参考下方代码:
  1. const cfs = sheet.conditionalFormats;
  2. const style = new GC.Spread.Sheets.Style();
  3. style.formatter = "0";
  4. // 条件格式应用的区域为:A列
  5. const ranges = [new GC.Spread.Sheets.Range(-1, 0, -1, 1)];
  6. cfs.addFormulaRule("=A1=INT(A1)", style, ranges);
复制代码

如果需求还不完整,请再详细清晰的描述下。
回复 使用道具 举报
王公子-_-
注册会员   /  发表于:6 天前
7#
如果是这样呢  我想根据字段定义的保留位数设置展示的formater,比如设置了保留3位小数,我输入12.1235346就显示12.124,我输入12.1仍然显示12.1  我输入12.230 就显示12.23,我输入12仍然显示12
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:3 天前
8#
调整代码如下:
  1. sheet.getCell(-1,0).formatter("0.###");
  2. const cfs = sheet.conditionalFormats;
  3. const style = new GC.Spread.Sheets.Style();
  4. style.formatter = "0";
  5. // 条件格式应用的区域为:A列
  6. const ranges = [new GC.Spread.Sheets.Range(-1, 0, -1, 1)];
  7. cfs.addFormulaRule("=A1=INT(A1)", style, ranges);
复制代码
事实上,SpreadJS对于formatter和条件格式的设计是与Excel保持一致的,后续如有您有类似需求的话,可以先尝试借助AI查询到Excel对此需求的解决方案。
一般来说,SpreadJS也是同样适用的。
回复 使用道具 举报
王公子-_-
注册会员   /  发表于:前天 19:49
9#
单元格和表格列的表现形式不同
表格列无效小数位会清除,但最多展示3位小数不生效,单元格最多保留3位小数生效,但输入3或者3.00,格式化后会显示3
回复 使用道具 举报
王公子-_-
注册会员   /  发表于:前天 19:55
10#
本帖最后由 王公子-_- 于 2025-4-23 11:24 编辑

对单元格生效,对表格列设置formatter不生效,且对表格列设置cfs.addFormulaRule("=A1=INT(A1)", intStyle, tableRanges)会导致小数变整数
  1. let sheet = spread.getActiveSheet()

  2. let table = sheet.tables.add("table1", 1, 1, 3, 4)
  3. sheet.addSpan(2, 2, 1, 2)
  4. sheet.addSpan(3, 2, 1, 2)
  5. sheet.addSpan(4, 2, 1, 2)
  6. sheet.addSpan(5, 2, 1, 2)
  7. sheet.addSpan(6, 2, 1, 2)
  8. sheet.addSpan(7, 2, 1, 2)
  9. sheet.addSpan(8, 0, 1, 15)
  10. sheet.setValue(8, 0, "当table中存在合并单元格,且table下方存在横跨表格的合并单元格时,默认无法通过tab新增表格行");

  11. const cfs = sheet.conditionalFormats;
  12. const intStyle = new GC.Spread.Sheets.Style();
  13. intStyle.formatter = "0"; // 整数格式

  14. const cellRanges = [new GC.Spread.Sheets.Range(0, 0, 1, 1)];
  15. cfs.addFormulaRule("=A1=INT(A1)", intStyle, cellRanges);

  16. // 条件格式应用的区域为表格区域
  17. const tableRanges = [new GC.Spread.Sheets.Range(1, 1, 3, 1)];
  18. cfs.addFormulaRule("=A1=INT(A1)", intStyle, tableRanges); // 为表格设置会导致小数变整数

  19. // 要先设置addFormulaRule后setFormatter 单元格才生效,先setFormatter后addFormulaRule单元格输入整数会出现小数点,例:13=>13.
  20. sheet.setFormatter(0, 0, '0.##')
  21. table.getColumn(table.getColumnName(0)).formatter('0.##');
复制代码

回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部