将多个Google表单合并到一个主日志记录表中

时间:2017-03-27 18:16:16

标签: google-apps-script google-sheets spreadsheet google-spreadsheet-api

我们有谷歌电子表格,其中包含人们记录的数据以及按照此格式记录的数据。

这里有鲍勃的活动: enter image description here 和罗伯特的活动: enter image description here

每个家伙都有一个带有他名字的电子表格,有可能在一天内没有任何活动。

我想创建一个主日志记录表,其中包含遵循以下格式的所有人的活动: enter image description here

您可以在此处找到此电子表格的链接: https://docs.google.com/spreadsheets/d/1cgbWgWDe9Ec1t6Af33ICZObQwiJJyLHxOmFJDCoY6As/edit?usp=sharing

如果在其中一个人活动中出现更改,我希望这个“主表”能够自动生成和动态。所以我想我需要脚本?

然而我找不到办法做到这一点......

1 个答案:

答案 0 :(得分:1)

我没有太多时间来解释这一点,但下面的公式将为“Bob”和“Robert”添加一列,并为每组数据添加并将两个集合作为一个数组,将其返回到查询并排序日期列的结果。区域之间存在差异,您的样本表要我使用;正常使用时,和我在使用的地方,在数组定义中:{range1,range2} vs {range1 \ range2}

=QUERY(
      {ARRAYFORMULA({IF(ISBLANK(Bob!A3:A);;"Bob") \Bob!A3:G});
      ARRAYFORMULA({IF(ISBLANK(Robert!A3:A);;"Robert") \Robert!A3:G})};
      "select * where Col1 <> '' order by Col2")

把它放在A2的单元格中,你很好。您也可以使用IMPORTRANGE()从不同的工作表中提取数据。

编辑: 在上面的答案中,我错过了数据在OP希望堆叠的每一行上有3组值。为此,我们为初始数据嵌套query()函数,并在每个函数中返回相应的列:

=QUERY(
 {
  QUERY(
   {
    ARRAYFORMULA({IF(ISBLANK(Bob!A3:A);;"Bob") \Bob!A3:G});
    ARRAYFORMULA({IF(ISBLANK(Robert!A3:A);;"Robert") \Robert!A3:G})
   };
   "select Col1, Col2, Col3, Col4 where Col1 <> ''"; 0);
  QUERY(
   {
    ARRAYFORMULA({IF(ISBLANK(Bob!A3:A);;"Bob") \Bob!A3:G});
    ARRAYFORMULA({IF(ISBLANK(Robert!A3:A);;"Robert") \Robert!A3:G})
   };
   "select Col1, Col2, Col5, Col6 where Col1 <> ''"; 0);
  QUERY(
   {
    ARRAYFORMULA({IF(ISBLANK(Bob!A3:A);;"Bob") \Bob!A3:G});
    ARRAYFORMULA({IF(ISBLANK(Robert!A3:A);;"Robert") \Robert!A3:G})
   };
   "select Col1, Col2, Col7, Col8 where Col1 <> ''"; 0)
  };
  "select * order by Col2"; 0)

这只返回第一组查询中包含有效数据的行,然后在最后一次查询中对它们进行排序。