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

QQ登录

只需一步,快速开始

[处理中] 条件格式问题

wutao@digiwin
金牌服务用户   /  发表于:2025-4-8 16:30  /   查看:73  /  回复:9
1金币
image.png728239440.png image.png620955199.png if(row==0&&col==1) sheet.setValue(row + 3, col + 1, 'NULL');
在官网里面设置某个单元格为NULL,会出现大于50的数据NULL也被选中,addCellValueRule条件格式是否有这个bug

https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/features/cells/conditional-format/basic-conditional-format/purejs

9 个回复

倒序浏览
Sophia
注册会员   /  发表于:2025-4-8 16:54:16
沙发
我在微软的Excel里试了一下这个条件格式,表现出来的行为跟SpreadJS中的表现一致,确实还挺奇怪的,不知道是什么原理。
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2025-4-8 17:56:03
板凳
我将深入调研下此问题,有进展会及时联系您。
回复 使用道具 举报
wutao@digiwin
金牌服务用户   /  发表于:2025-4-9 09:08:04
地板
Ellia.Duan 发表于 2025-4-8 17:56
我将深入调研下此问题,有进展会及时联系您。

好的
回复 使用道具 举报
不吐葡萄皮
初级会员   /  发表于:2025-4-9 09:13:56
5#
因为字符串大于数字,公式="NULL">50结果是TRUE

评分

参与人数 1金币 +200 收起 理由
Wilson.Zhang + 200

查看全部评分

回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-4-9 11:10:42
6#
您好!我们深入调研了此问题,如5楼用户的回复所言,SpreadJS和Microsoft Excel条件格式认为字符串大于数字,是产品固有设计。

以您图示中的使用为例,可以设置公式规则,使用ISNUMBER公式判断单元格数据是否为数字,如果是数字则判断其值是否大于或小于某给定值,进一步由IF公式使用ISNUMBER公式的判断结果返回最终结果,参考如下代码:
  1. var cfs = sheet.conditionalFormats;
  2. cfs.addFormulaRule("=IF(ISNUMBER(B4:D6),B4:D6>50,FALSE())", style, [new GC.Spread.Sheets.Range(row, col, rowCount, colCount)]);
复制代码

如下图所示:
1744168233909.png471856994.png
回复 使用道具 举报
wutao@digiwin
金牌服务用户   /  发表于:2025-4-9 12:14:43
7#
Wilson.Zhang 发表于 2025-4-9 11:10
您好!我们深入调研了此问题,如5楼用户的回复所言,SpreadJS和Microsoft Excel条件格式认为字符串大于数字 ...

那如果是日期格式呢,如:大于‘2022-02-05’上述代码写法也能生效吗?这个好像只能输入数字吧,日期的字符串好像不行
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-4-9 14:03:39
8#
wutao@digiwin 发表于 2025-4-9 12:14
那如果是日期格式呢,如:大于‘2022-02-05’上述代码写法也能生效吗?这个好像只能输入数字吧,日期的字 ...

显示为日期格式的数据本身还是数字,比如在单元格中键入“2022-02-05”后单元格自动识别该数据表示的是一个日期,所以会将其转为日期格式“2022/2/5”,如下动图所示:
填充日期.gif

手动对日期数据所在单元格设置格式为“常规”,可看到其对应数值为44597。此时,再使用ISNUMBER公式分别对日期格式数据和对应的数值执行计算,可看到结果否为TRUE,表明其本身是一个数值。

所以,在咱们当前讨论的场景中,对B4: D6中任意单元格填充字符串“NULL”和日期数据“2022-02-05”均会被条件格式规则“>50”视为正常情况。因为,“NULL”作为字符串被当作大于数字的存在,而日期数据“2022-02-05”是数字。

Microsoft Excel对此处理与上述一致,如下动图所示:
Excel填充日期.gif

请教下您的实际使用场景中会对连续单元格区域中填充数字、字符串、日期数据等多种数据吗?由于条件格式将字符串看作大于任何数字的存在、以及日期数据也是数字等本质设计,建议您对单元格根据以待填充的数据类型分别设置条件格式以规避不符合预期的情况。
回复 使用道具 举报
wutao@digiwin
金牌服务用户   /  发表于:2025-4-9 16:57:15
9#
Wilson.Zhang 发表于 2025-4-9 14:03
显示为日期格式的数据本身还是数字,比如在单元格中键入“2022-02-05”后单元格自动识别该数据表示的是一 ...

是的,我们这边要求可以输入任何类型,日期是字符串格式,不是数字,所以使用addCellValueRule判断大于'2022-02-05'的值会将NULL也判断进去,单元格展示的也是日期字符串
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-4-9 17:14:47
10#
wutao@digiwin 发表于 2025-4-9 16:57
是的,我们这边要求可以输入任何类型,日期是字符串格式,不是数字,所以使用addCellValueRule判断大于'2 ...

那您可以在输入日期数据时,在日期数据最前头加上单引号,这样就能将日期数据识别为字符串。然后,再辅以公式归职责“=IF(ISNUMBER(B4: D6), B4: D6>50, FALSE)”跳过默认对字符串数据的处理,如下动图所示:
日期数据字符串化.gif
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部