【社区答疑】通过WPS表格JS宏自定义函数获取单元格背景色的颜色值

张俊
张俊

WPS函数专家

要想下班早,表格必须用的好!

大家好,我是张俊。

场景

最近在社区上看到求助者这样一篇提问帖子:请问下自定义函数怎么设置传入单元格的背景色,内容具体如下:

  1. 场景分析

求助者主要是想通过在WPS表格中通过JS宏的自定义函数来获取B2单元格中的背景色的颜色值。此问题看起来其实并不复杂,只需要获取出B2单元格背景色的颜色值即可。但是复杂的是,获取到的颜色值相以什么样的方式展示呢?

💡

我们需要知道有哪些?

WPS表格颜色索引值、10进制的颜色值、16进制的颜色值、RGB值、HSL值和CMYK值等,由于HSL值和CMYK值等并不常见,暂不做展示,如有需要可以在评论区留言,视情况来编写对应的值。

  1. 操作步骤

2.1进入开发环境

如果对于WPS表格JS宏知之甚少的话,建议可以从此帖学起:👉【JS宏教程】WPS表格JS宏快速入门必备最基础知识

1.WPS表格的“工具”选项卡中点击“开发工具”

2.在展开的“开发工具”选项卡中点击“WPS 宏编辑器”即可进入WPS JS宏编辑器。

具体如下图操作所示:

2.2编写自定义函数代码框架

1.在“编辑代码区”直接输入如下代码:

function GET_COLOR(rng,type){

}

具体如下图操作所示:

2.3输入对应代码

在自定义函数代码框架代码中输入以下代码:

var clr_idx=rng.Interior.ColorIndex

if (type=="idx"){

return clr_idx

}

clr=rng.Interior.Color

if (type=="10"){

return clr

}

var wf=Application.WorksheetFunction

var clr_hex=wf.Dec2Hex(clr)

var hex_len=clr_hex.length

if (hex_len<6){

clr_hex=wf.Rept("0",6-hex_len)+clr_hex

}

r_hex=clr_hex.slice(4)

g_hex=clr_hex.slice(2,4)

b_hex=clr_hex.slice(0,2)

if (type=="16"){

return r_hex+g_hex+b_hex

}else if(type=="rgb"){

return wf.Hex2Dec(r_hex)+","+wf.Hex2Dec(g_hex)+","+wf.Hex2Dec(b_hex)

}

具体如下图所示:

2.4加上代码注释

对于2.3输入代码后,其实程序已经可以达到对应的效果了,但是对于初学者不太友好,具体如下:

1.初学者不知道代码逻辑和意义

2.如果想修改代码也不知道如何修改

因此给代码加上注释也是一个程序员必备基本技能。

具体代码和注释如下:

function GET_COLOR(rng,type){

var clr_idx=rng.Interior.ColorIndex//获取对应单元格背景色的索引值

if (type=="idx"){//如果第二参数为idx时,则返回索引值

return clr_idx

}

clr=rng.Interior.Color//获取对应单元格背景色的10进制颜色值

if (type=="10"){//如果第二参数为10时,则返回10进制颜色值

return clr

}

var wf=Application.WorksheetFunction//声明wf为工作表函数,方便后期调用和简化代码

var clr_hex=wf.Dec2Hex(clr)//将10进制的颜色值转化为16进制的颜色值

var hex_len=clr_hex.length//获取16进制颜色值的长度

if (hex_len<6){//判断16进制颜色值的长度是否小于6位

clr_hex=wf.Rept("0",6-hex_len)+clr_hex//如果小于6位则在前面补充对应的0补充至6位

}

r_hex=clr_hex.slice(4)//获取16进制颜色的红色值(为16进制颜色的第5-6位)

g_hex=clr_hex.slice(2,4)//获取16进制颜色的绿色值(为16进制颜色的第3-4位)

b_hex=clr_hex.slice(0,2)//获取16进制颜色的蓝色值(为16进制颜色的第1-2位)

if (type=="16"){//如果第二参数为16时,则返回16进制对应的颜色值

return r_hex+g_hex+b_hex

}else if(type=="rgb"){//如果第二参数为rgb时,则返回10进制对应的rgb值

return wf.Hex2Dec(r_hex)+","+wf.Hex2Dec(g_hex)+","+wf.Hex2Dec(b_hex)

}

}

  1. 操作效果

3.1标准背景色

完成WPS表格JS宏的自定义函数的效果如下操作所示:

3.2自定义背景色

设置自定义背景颜色后,效果如下图所示:

3.3自定义函数说明

自定义函数GET_COLOR包含2个参数:rng和type

参数1:rng获取对应单元格

参数2:type有4个值分别为:"idx"、"10"、"16"、"rgb"

"idx"返回颜色索引值(WPS表格默认的56个颜色<返回1到56的整数>)

"10"返回10进制的颜色值(0到16777215<256的3次方>)

"16"返回"000000"到"FFFFFF"(16进制的0到16777215<256的3次方>)

"rgb"返回对应的RGB值(各值之间用","隔开<各个值在0到255之间>)

  1. 文件保存

最后保存文件的时候会有提示,记得点击“否”,由于包含有JS宏代码,建议保存为“xlsm”格式的文件哦~

关于通过WPS表格JS宏事件完成点击后显示结果的方法,你学会了吗?学会的话,记得点赞❤️❤️❤️并在评论区评论“我学会了!”,您的点赞❤️❤️❤️和评论是对我最大的支持!

练习文件:👉JS宏自定义函数获取单元格颜色值👈


往期社区答疑帖子推荐:

【JS宏教程】WPS表格JS宏快速入门必备最基础知识

【社区答疑】通过WPS表格JS宏事件完成点击后显示结果

【社区答疑】制作表格思路及表格调整(一)

【社区答疑】通过WPS表格的数据透视表转换表格结构(二)

【社区答疑】通过WPS表格的函数完成表格最终需求(三)

【社区答疑】使用WPS表格函数公式自动生成库位号(一)

【社区答疑】使用WPS表格函数公式自动生成库位号(二)

个人往期帖子合集:【帖子合集】个人往期帖子合集来了!

关于WPS表格JS宏自定义函数你学会了吗?
学会了!
2 (50%)
太难了!
2 (50%)
4人参与 投票已截止
上海
浏览 2694
收藏
8
分享
8 +1
3
+1
全部评论 3
 
臻
非常感谢你的教程,换了国产系统之后,只能使用JS,以前的方法根本用不了,希望多出JS这方面的教程。
· 广东省
回复
 
尹俊超
尹俊超

创作者俱乐部成员

我来学习了师兄~
· 湖北省
1
回复
张俊
张俊

WPS函数专家

超哥来学习JS了,JS等着你探索和发现。
· 上海
回复