如何使用数组公式在 Google 工作表中创建周历 sheet?

How to create a week calendar sheet in Google Sheets using Array Formulas?

我有一个“数据库”sheet,其中包含条目,日期为周数:

NAME   | ACTION  | WEEK
------------------------
carrot | harvest | 48
carrot | wash    | 48
garlic | plant   | 49

(为方便起见,将列设置为命名范围。)

我想在第二个 sheet 上自动生成每周行动日历,如下所示:

(A)       || (B) | (C)     | (D)   | (E) 
-----------------------------------------
NAME / WK || 47  | 48      | 49    | 50 | (1)
=========================================
carrot    ||     | harvest |       |    | (2)
          ||     | wash    |       |    | 
-----------------------------------------
garlic    ||     |         | plant |    | (3)

如果我要使用手动插值,我会在上面示例中的值单元格 (B2:E3) 中放入这样的公式:

=IFNA(JOIN(CHAR(10), FILTER(ACTIONS, WEEK=B, NAME=$A2)), "")

(这个特定的公式将放在单元格 B2 中。)

但是,我不想在此日历中使用手动插值:当我在数据库 sheet 中添加、更改或删除行时,日历 sheet 应该自动更新,无需我更改那里有什么。

有没有办法通过将单个公式放入(比如)B2 单元格而不是手动填充 B2:E3 范围内的每个单元格来做到这一点? (假设我已经自动填充 A:A 和 1:1,但如果需要可以将其移入该公式。)

尝试:

=ARRAYFORMULA(QUERY(TRIM(SPLIT(FLATTEN(QUERY(TRANSPOSE(QUERY(QUERY(
 {A2:A&"♦", B2:B, "♦"&C2:C, CHAR(10)&B2:B}, 
 "select Col1,max(Col4),Col3 
  where Col2 is not null 
  group by Col1,Col3 
  pivot Col2"), "offset 1", 0)),,9^9)), "♦")), 
 "select Col1,max(Col2) 
  group by Col1 
  pivot Col3
  label Col1'NAME / WK'"))

好吧,我花了更长的时间,而且我有一个更丑陋的公式,我现在甚至不会尝试优化,但如果有人想考虑一种不同的方法来做,与 player0 的解决方案相比,这里又是一个公式:

=ArrayFormula(query(
 {trim(split(transpose(query(
   { query(   query({A2:A & "~" & C2:C & "~", "♦" & B2:B},
                "select max(Col2) where Col1<>'~~' group by Col2 pivot Col1",0),"limit 0",1);
     substitute(regexreplace(trim( 
       query(
        query(query({A2:A & "~" & C2:C & "~", "♦" & B2:B},
                "select max(Col2) where Col1<>'~~' group by Col2 pivot Col1",0),"offset 1",0),,99^99)
       ), "^♦","" ),"♦",char(10))
   },,99^99)),"~",1,0))
 },"select Col1, max(Col3) group by Col1 pivot Col2",0))

也许不使用 FLATTEN 是造成设计复杂的一个因素...