求助:如何在Google Sheets中自动生成按日期重复的员工工时表
Google Sheets 每日员工工时表格整合方案
需求说明
制作Google Sheets表格,用于记录指定日期范围(通常为一周)内员工每日工时。要求每个日期下自动列出所有员工姓名,并预留工时填写位置,即员工姓名需按日期数量重复显示,最终呈现为「每日-对应员工」的表格形式。
已完成的基础公式
- 自动生成日期:
=ARRAYFORMULA(TO_DATE(SEQUENCE(D2, 1, E2, 1))),从起始日期E2生成D2天的日期序列 - 自动生成星期:
=ARRAYFORMULA(switch(WEEKDAY(SEQUENCE(D2, 1, E2, 1)), 1, "Sunday", 2, "Monday", 3, "Tuesday", 4, "Wednesday", 5, "Thursday", 6,"Friday", 7, "Saturday")),对应日期生成星期文本 - 引用员工姓名:
=ArrayFormula(E5:INDIRECT("E"&ROW(E5)+D5)&{""}),通过间接引用获取完整员工列表
现存问题
无法将上述内容整合为目标表格,尝试过相关教程及数组扁平化方法后,结果仅能实现日期、星期、员工名单各自单列显示,不符合「每日对应员工」的排版需求。
整合解决方案
使用以下公式可直接生成符合要求的表格(假设从A1单元格开始输入):
=ARRAYFORMULA( LET( days, SEQUENCE(D2,1,E2,1), dates, TO_DATE(days), weeks, SWITCH(WEEKDAY(days),1,"Sunday",2,"Monday",3,"Tuesday",4,"Wednesday",5,"Thursday",6,"Friday",7,"Saturday"), staff, E5:INDIRECT("E"&ROW(E5)+D5-1), staff_count, COUNTA(staff), date_repeat, FLATTEN(SPLIT(REPT(dates&"|",staff_count),"|")), week_repeat, FLATTEN(SPLIT(REPT(weeks&"|",staff_count),"|")), staff_repeat, FLATTEN(SPLIT(REPT(JOIN("|",staff)&"|",D2),"|")), VSTACK( {"日期","星期","员工姓名","工时"}, HSTACK(date_repeat, week_repeat, staff_repeat, IFERROR(SEQUENCE(D2*staff_count,1)/0,"")) ) ) )
公式逻辑说明
- 用
LET定义变量简化结构,分别存储日期序列、格式化日期、星期文本、员工列表及员工数量 - 通过
REPT+SPLIT+FLATTEN组合实现:- 每个日期/星期重复显示,次数等于员工总数
- 员工列表重复显示,次数等于日期天数
- 用
VSTACK添加表头,HSTACK合并所有列,工时列通过IFERROR生成空值区域,用于手动填写工时
注意事项
- 确保单元格对应关系:D2为日期天数,E2为起始日期,D5为员工总数,E5及以下为员工姓名列表
- 若需动态识别员工数量,可将公式中
D5替换为COUNTA(E5:E),同时修改员工引用部分为E5:INDIRECT("E"&COUNTA(E5:E)+4)
内容的提问来源于stack exchange,提问作者Amazeing Games
相关产品推荐
相关产品推荐

