仅在指定的星期几生成预定数量的日期列表,并使用谷歌脚本排除特定的日期列表

时间:2016-03-14 23:43:36

标签: javascript function google-sheets

我想制作list of meetings/lessons (in google sheets)仅在周日和周三(例如)重复出现,除了假期和/或其他预定日期。 "假期"可能会增长,所以列表必须跳过这几天,并始终保持69次会议/课程 enter image description here 单元格A3中的简单函数等等:

=IF(WEEKDAY(A2)=1,A2+3,A2+4)

无法正常工作,因为它不知道跳过假期列表。 和

=WORKDAY.INTL()

不能工作,因为周三不能申请星期天。 所以我必须创建一个使用与= WORKDAY.INTL()相同的规则的脚本,但教它只使用特定的工作日。

任何帮助表示赞赏。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

假设我们在单元格中有值:

  • B2 = 69(或任何数字)
  • A2 = 3/9/2016(第一次约会)
  • C2:C =要跳过的日期列表

将此公式粘贴到单元格A3中:

=QUERY(ARRAYFORMULA((if(ISEVEN(row(OFFSET(A1,,,B2-1+counta(C2:C)))),row(OFFSET(A1,,,B2-1+counta(C2:C)))/2*3+row(OFFSET(A1,,,B2-1+counta(C2:C)))/2*4,(row(OFFSET(A1,,,B2-1+counta(C2:C)))-1)/2*3+(row(OFFSET(A1,,,B2-1+counta(C2:C)))-1)/2*4+4)+A2)*(--not(regexmatch(text(if(ISEVEN(row(OFFSET(A1,,,B2-1+counta(C2:C)))),row(OFFSET(A1,,,B2-1+counta(C2:C)))/2*3+row(OFFSET(A1,,,B2-1+counta(C2:C)))/2*4,(row(OFFSET(A1,,,B2-1+counta(C2:C)))-1)/2*3+(row(OFFSET(A1,,,B2-1+counta(C2:C)))-1)/2*4+4)+A2,"dd/mm/yyyy ddd"), "(?i)" & JOIN("|",filter(C2:C,C2:C>0)))))),"select Col1 where Col1 > date'1900-01-01'",0)

公式将自动展开并显示结果。

enter image description here

公式中的数字3和4可能会更改为选择其他日期。

公式中的日期格式"dd/mm/yyyy ddd"将更改为您的格式。

示例

try it yourself