Wilson.Zhang 发表于 2024-9-27 18:36:31

条件规则(ConditionalFormatter)处理空值

本帖最后由 AlexZ 于 2024-10-9 14:10 编辑

SpreadJS条件格式中的条件规则将null、undefined当作0值处理,将空字符串""当作文本处理。如图1所示,为单元格区域B4 : D6设置条件规则为 > 50时单元格背景色设置为绿色,对区域内值为空字符串的单元格认定为 > 0;为单元格区域F4 : H6设置条件规则为==0时单元格背景色设置为粉色,对区域内值为null或undefined的单元格认定为0。


图1. 条件规则
然而,在Excel中,似乎无法对单元格设置null、undefiend、空字符串"",而SpreadJS支持通过Worksheet:setValue()为单元格设值为null、undefined、空字符串"",这样可能会影响某些场景下的用户期望。那么,如何能将null、undefined、空字符串""不看作等于0的值,或任意数值呢?翻阅官网API文档,发现ConditionalFormats:addFormulaRule()设置的公式规则可以代替数值规则。具体地,为单元格设置公式规则判断单元格内容是否为数值,如果是再进一步判断是否符合条件规则。举个栗子,如图1所示B4 : D6单元格区域的条件规则为 > 50,可变换为公式规则:

cfs.addFormulaRule('=IF(ISNUMBER(B4:D6), B4:D6>50, FALSE())', style, );
对B4 : D6、F4 : H6设置与原来的数值条件规则对等的公式条件规则,即可消除SpreadJS条件规则对null、undefind、空字符串""的原生判断带来的影响,如图2所示。


图2. 公式规则
当数值条件规则因null、undefined、空字符串""等特殊值的影响而受限时,可以转道尝试用公式规则代替。附上demo,以供参考。
页: [1]
查看完整版本: 条件规则(ConditionalFormatter)处理空值