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

QQ登录

只需一步,快速开始

湖南大商帮

初级会员

44

主题

152

帖子

454

积分

初级会员

积分
454
湖南大商帮
初级会员   /  发表于:2021-6-19 12:00  /   查看:2946  /  回复:12
1金币
本帖最后由 湖南大商帮 于 2021-6-20 23:03 编辑

excel 的条件格式比较好理解,spread的条件格式API实在是看的晕头转向,太多方法了,不知道要用哪个。
我们现在的需求是,每一行的需求都是一样的,根据当前行指定的单元格的值来动态控制文字的颜色,比如:
如果"汇总"列(是CheckBox类型)的值是true,那么这一行的所有文字显示红色,否则的话,再看"合计"列的值,如果为true,则显示绿色,否则,就显示为默认的黑色。

版主能否给个大致的代码思路我参考一下,万分感谢!

最佳答案

查看完整内容

参考下面的代码利用公式条件格式实现

12 个回复

倒序浏览
最佳答案
最佳答案
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-6-19 12:00:35
来自 7#
湖南大商帮 发表于 2021-6-21 09:59
监听的话,可能无法满足我的需求,因为行本身就已经有默认的背景色了,用条件格式的话,可以自动覆盖默认的 ...

参考下面的代码利用公式条件格式实现
  1. var style = new GC.Spread.Sheets.Style();
  2. style.backColor = "red";
  3. var ranges = [new GC.Spread.Sheets.Range(0, 0, 10, sheet.getColumnCount())];
  4. sheet.conditionalFormats.addFormulaRule("=$a1=true", style, ranges);
复制代码

image.png384120177.png

回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-6-21 09:22:20
2#
可以参考下面的代码
  1. var style = new GC.Spread.Sheets.Style();
  2. style.backColor = "red";
  3. var ranges=[new GC.Spread.Sheets.Range(0,0,5,1)];
  4. sheet.conditionalFormats.addCellValueRule(GC.Spread.Sheets.ConditionalFormatting.ComparisonOperators.equalsTo, TRUE, style, ranges);
复制代码

image.png909574279.png
回复 使用道具 举报
湖南大商帮
初级会员   /  发表于:2021-6-21 09:36:30
3#
大致上看明白了,有点不明白的是,这个true,在没有明确指定某个取值范围的时候,他是基于什么去判断的呢,如果这一行里面我有好几个单元格都是true,false之类的值
回复 使用道具 举报
湖南大商帮
初级会员   /  发表于:2021-6-21 09:39:20
4#
本帖最后由 湖南大商帮 于 2021-6-21 09:48 编辑

以上代码,似乎只有CheckBox所在列的背景才会变红,我的需求是,当CheckBox选中后,整个所在行的所有单元格背景色都变红,而不是当前checkbox列;
比如CheckBox在E1列,我预想的代码,类似:
style={...}
ranges={E:1....En}
addCellValueRule(0, "=$E$1==TRUE",null,style, ranges);
当E1列的CheckBox==true的时候,本行所有的单元格都自动变色
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-6-21 09:48:00
5#
湖南大商帮 发表于 2021-6-21 09:39
以上代码,似乎只有CheckBox所在列的背景才会变红,我的需求是,当CheckBox选中后,整个所在行的所有单元格 ...

如果是这种情况您可以用事件去做,不用条件格式。您可以监听ValueChanged事件,当CheckBox的值改变为true时会触发这个事件,然后用style给所在行添加一个背景色,如果为false则用clear清除所在行的样式。

https://demo.grapecity.com.cn/sp ... orksheet.html#clear

回复 使用道具 举报
湖南大商帮
初级会员   /  发表于:2021-6-21 09:59:22
6#
监听的话,可能无法满足我的需求,因为行本身就已经有默认的背景色了,用条件格式的话,可以自动覆盖默认的背景色,还原的话,无需依赖代码来控制背景色的还原,通用性比较强……
还有我设想的
比如CheckBox在E1列,我预想的伪代码类似:
style={...}
ranges={E:1....En}
addCellValueRule(ComparisonOperators.equalsTo, "=$E$1==TRUE",null,style, ranges);
当E1列的的值==true的时候,本行所有的单元格都自动变色,似乎不凑效
回复 使用道具 举报
湖南大商帮
初级会员   /  发表于:2021-6-21 10:36:39
8#
版主简直爱死你了~!这就是我想要的完美的解决方案!太感谢了,周末困扰我2天了,终于找到答案了,万分感谢!!!
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-6-21 10:42:23
9#
湖南大商帮 发表于 2021-6-21 10:36
版主简直爱死你了~!这就是我想要的完美的解决方案!太感谢了,周末困扰我2天了,终于找到答案了, ...

解决了就好,有新问题欢迎开新帖交流~
回复 使用道具 举报
湖南大商帮
初级会员   /  发表于:2021-6-21 11:24:36
10#
本帖最后由 湖南大商帮 于 2021-6-21 11:33 编辑

刚才测试了下,有个神奇的发现:
比如我的CheckBox在E1列,range为所有行所有列,代码如下:
style={bgColor:red}
var ranges = [new GC.Spread.Sheets.Range(-1,-1,-1,-1)];
sheet.conditionalFormats.addFormulaRule("=$e1=true", style, ranges);

不管点哪一行的CheckBox,对应行的背景色就自动变色了,简直神奇了,我原以为需要一行一行去指定这个条件格式(e1=true这个),他是如何自动设定每一行的这个E1=true的呢,包括新增的行,也自动继承了这个条件格式的效果
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部