起因
大概是我这有个会议室,然后很多人要使用,那就要大家登记一下,而且登记的时候能检查时间是否冲突就最好了。看了一下也没有现成的东西可以用,后来就想到了在线文档,如果做个共享表格来登记的话就行了。
需求
- 能写时间,这个很容易
- 能判断冲突,这个逻辑很简单,但是在Excel里面就没那么容易了
实现
现在在线文档有几家在做,随便打开了腾讯的,然后进去新建一个表格。大概看了一下面板,有数据验证,可以下拉选项,这个用来做第一点需求。然后还有挺多函数可以用,想了一下开始动手尝试。
先大概这样建个表头。
然后要让人填起来很方便,可以给出一些日期和时间的下拉列表。先在表里写出来选项,(这里呢,数据验证的选项,腾讯文档是不支持跨工作表引用的,而石墨文档支持)
大概是这么个样子,这里都是用函数写的,日期就是=TODAY()+n
这样写的,这样就能实现选项的日期会自己调整。然后时间是用=TIME(8,0,0)
这种写的,这个不用可变,就是个值。
弄好之后,去给前面的表格加上数据验证,比如第一列可选的日期就是在A3:A100
上都加上一个下拉列表的选择,内容是前面建的日期范围。如下图:
最后弄完应该是每个框都有个下拉的可以选的。
下面是第二步,检查时间冲突。这个我之前的想法是,新建的时候遍历一遍各行,检查某行,如果其开始时间位于另一行的开始时间和结束时间之间就显示时间冲突。想法很简单,但是第一次做,就到处找各种函数的功能,这里直接上函数吧:
=IF(COUNTIFS(A3:A100,INDIRECT("A"&ROW()),B3:B100,"<="&INDIRECT("B"&ROW()),C3:C100,">"&INDIRECT("B"&ROW()))>1,"时间冲突","")
COUNTIFS函数是统计,条件1~条件n成立的记录条数,所以如果这玩意大于0就返回时间冲突。这里条件1是日期列相等,时间列在两个时间之间。BUT,这样写不知道哪里有BUG啊,不能正常检测。这时候,我饿了……所以,等我点个发布我就去吃饭。
EXCEL!是真滴牛逼! 真的好饿,我要点发布了
更新
破案了,之前结果失败是因为辣鸡腾讯文档,表达式的值计算不及时,同样的在石墨文档里填完一个时间就能立刻刷新是否冲突,但是腾讯的填完时间之后不刷新,返回去更改一下日期才会刷新,简直不能更辣。然而石墨文档不充钱就不能锁定某些内容不让别人编辑,这我用个锤子?
啊辣辣辣,宣告失败。
再次更新
这个需求最终通过飞书解决了。