经验分享:根据国家法定节假日和调休安排,自动为用户生成未来的工作日作为选项
前言:我之前使用多维表格制作了一个“会议室预约系统”的小应用,其中用户可以选择未来7天的日期进行预约。我碰到了一个难题,就是这7天必须是工作日,要考虑国家法定节假日、周末、调休等。我找了很多API和工具啥的,也没有很靠谱的。最后没办法自己维护了一份国家法定节假日的数据,写了几个函数去计算,这会产生一个问题,就是我每年都要去关注国家假日办的通知,去更新我的节假日和调休信息。后来我想到一个新的办法,请大家往下看。(头发少的人就是聪明🤑)
应用场景:充分考虑到周末、国家法定节日、调休,为用户提供未来7天的工作日作为选项。其实说实话,在我的“会议室预约系统”中,这个考不考虑无所谓,但是我天生就是个“抬杠”的😁。下面主要针对我自己的系统进行说明,其他应用场景大家自己丰富去吧。
优点:不用调用API,不用自己维护数据,全自动依靠WPS自己计算工作日。在某些需要严格依赖工作日计算工时或者安排日程的系统中,这种方法很有效!!!
(具体实现,其实很简单,我就简单的说吧)
多维表格公式字段中,有一个公式为“=NETWORKDAYS.PLUS([@日期],[@日期])”,这个公式可以计算两个日期间的工作日的天数,这个公式考虑了国家法定节假日和调休,而且自动更新,因为国家已经制定好了2026年的假日安排(国家每年会提前通知),所以这个公式的内置数据已经更新到了2026年,虽然2027年之后的不是很靠谱,但是不影响我们使用。
当我们把“=NETWORKDAYS.PLUS([@日期],[@日期])”其中的两个参数日期改为同一天,我们就会得到这一天是不是工作日,结果为1,那么就表明这一天是工作日,为0,就表明这一天不是工作日。我据此在多维表格中建立了一份数据(如下图),从2026年1月1日一直到2050年12月31日,算出了每一天是不是工作日。(虽然2027年之后,国家没有通知具体假日安排,但是我们提前建立好后,一旦国家发文了,WPS自动会更新公式的。也就是直到2050年年底,我再也不用自己去维护假日数据了,一切交给WPS了)
有了这个假日数据库,相信大家对做好一个事关工作日的系统,就信心十足了吧。在我的“会议室预约系统”中,我设定了一个自动化流程定时任务(这个定时任务我也设置到了2050年最后一秒,我是杠精,大家别学我),即每天下午16点,执行Python脚本,脚本会产生从次日起算的7个工作日,这7个工作日会写入“智能表格”中,由“智能表单”的“下拉题”(该题引用“智能表格”的数据作为选项)。因为我的假日数据库从2026年1月1日起算,第一个工作日是2026年1月4日,所以就是下面这个样子了。
这是脚本代码:
from datetime import datetime, timedelta
field_condition = {
"mode":"AND",
"criteria":[
{
"field":"工作日",
"op":"Equals",
"values":[
"1"
]
}
]
}
#sheet_name对应上述节假日数据表的名称,请改成自己的名称吧
df = dbt(sheet_name='法定工作日', condition=field_condition)
workday = df['日期'].values
today = datetime.now().date()
date_list = []
i = 0
while len(date_list)<7:
current_date = today + timedelta(days=i+1)
if current_date.strftime('%Y/%m/%d') in workday:
date_list.append(current_date.strftime('%Y年%m月%d日'))
i += 1
date_list.insert(0, '预约日期')
url = 'https://kdocs.cn/l/cp********Xz' #换成自己的智能表格url
#下面的'预约日期选项',是智能表格中的工作表的名称,请改成自己的
delete_xl(range='A:A', sheet_name='预约日期选项', book_url=url)
write_xl(data=date_list, range=f'A1:A{len(date_list)}', sheet_name='预约日期选项', book_url=url)后记:今天有点时间,就一股脑发了两个我在使用多维表格的过程中,发现问题,解决问题的经验。我本人2012年从南京工程学院计算机工程学院毕业后,几乎没怎么在软件公司工作过,后来考上了老家市直单位全额拨款事业单位,拿着微薄的死工资。但是想学技术的心一直未变,说来,自己现在哪还有什么技术,只能借助多维表格和小程序开发,让单位同时觉得我是个“技术大拿”,满足一丁点虚荣心。我还有不少经验,最近不发了,哪天想发随缘吧!!!
Lv.1新人创作者
Lv.3优质创作者