【社区答疑】根据单元格颜色提取相关信息(JS篇)
WPS函数专家
要想下班早,表格必须用的好!
大家好,我是张俊。
⭐场景
今天在社区看到求助者@WPS_1569843594提问关于提取表中对标绿色的单元格的颜色问题,有很多大佬参与,我也来凑个热闹,具体如下:
我整理的模拟数据如下:
- 问题分析
需要先了解下求助者的问题,主要是想将标记颜色的单元格对应的数据(公司名、工作内容、星期、日期、时段等)提取出来,如果想要提取表格中颜色的函数,目前WPS表格还没有这样的函数的,如果是用宏表函数的话,GET.CELL函数是可以考虑的(需要名称管理器里应用),也可以通过二次开发的VBA和JS来完成,由于WPS表格直接支持JS宏,因此我的方案是通过JS宏来完成。
- 代码制作
需要注意问题是对应的企业名称和日期存在合并单元格,而实际合并单元格除右上角存在内容,其他的单元格都是空白单元格,因此需要用到判断如果没有数据还需向上向左找数据(用到单元格的End方法)。具体代码如下:
function tqxx(){
var rngs=Range("c4:w13")
var arr=[["企业","工作内容","开始时间","结束时间","时段"]]
for (var rng of rngs){
if (rng.Interior.Color==65535){
var r=rng.Row
var c=rng.Column
//企业名称
if (Cells(r,1).Value2==null){
qymc=Cells(r,1).End(xlUp).Value2
}else{
qymc=Cells(r,1).Value2
}
//工作内容
var gznr=Cells(r,2).Value2
//星期和日期
if (Cells(1,c).Value2==null){
var xq=Cells(1,c).End(xlToLeft).Value2
var rq=Cells(2,c).End(xlToLeft).Value2
}else{
var xq=Cells(1,c).Value2
var rq=Cells(2,c).Value2
}
//时段
var sd=Cells(3,c).Value2
arr.push([qymc,gznr,rq,rq,sd])
}
}
Range("y1").Resize(arr.length,5).Value2=arr
}
- 效果展示
设置完成后,只需通过按钮一键点击即可完成,代码展示效果如下图操作所示:
- 方法总结
通过JS宏来编辑代码需用到的思路和方法具体如下:
1)通过For循环来遍历C4:W13单元格区域,单元格区域是先从左至右,再从上向下逐个遍历。
2)通过Range.Interior.Color判断单元格的背景颜色,当前为黄色,颜色值为655345。
3)读取对应的公司名称和日期时,需要偏移,因此需要获取满足条件的所在行序号(Row)或所在列序号(Column),再判断是否为空(null),如果为空则根据End(xlUp)和End(xlToLeft)方法的来向上或向左查找满足的数据。
4)将满足的数据存储在数组arr中,然后通过Rang.Resize方法,将数据写入到Y1单元格起始的区域中。
如对JS宏基础还不太熟悉的宝子们,可以参考此帖:【JS宏教程】WPS表格JS宏快速入门必备最基础知识
都看到这里了,记得得❤️❤️❤️点赞(红心)❤️❤️❤️和⭐⭐⭐收藏(五角星)⭐⭐⭐并在评论区评论“我学会了!”,您的❤️❤️❤️点赞(红心)❤️❤️❤️、⭐⭐⭐收藏(五角星)⭐⭐⭐和评论是对我最大的支持!
🚩 | 练习文件:👉【社区答疑】提取标示颜色区域的信息👈 |
JS宏基础推荐帖:【JS宏教程】WPS表格JS宏快速入门必备最基础知识
个人往期帖子合集:【帖子合集】个人往期帖子合集来了!
WPS函数专家
WPS函数专家
WPS函数专家
WPS函数专家
创作者俱乐部成员
WPS函数专家