首页 > 解决方案 > 如何将 Google 表单中的复选框网格响应作为单独的列输出到 Google 表格(加上计算时区)?

问题描述

我需要一些东西,我们的团队成员可以在一周内以 1 小时的间隔选择他们的常规可用时间,并且所有团队成员的结果都可以在电子表格中看到(如果他们填写 2 次或更多次,它将只需更新他们的最后回复)。从那里,选择特定成员可以开会的会议时间应该会简单得多!

我最近突然想到,谷歌表单谷歌表格可能是这里最好的解决方案之一!但我对Google Apps Script真的没有太多经验(看起来我需要做我想做的事),所以我有一些问题:

  1. 我有一个7 x 24(一周中的 7 天,以 24 个 1 小时间隔)的复选框网格(请参见此处的链接图像)。我该如何设置它,以便它可以在输出 Google 表格中的自己单独的列中输出每一行 + 列(请参阅此处的链接图像以获取我一天的首选输出)

    • 如果您想知道第三行发生了什么:我有 SUM 函数=iferror(counta(L4:L62))(其中 L 是列的字母)来汇总每列中的“检查的响应”,以便轻松查看X的数量(是的)对于每个小时块列。
  2. 如何自定义每个 Row+Column Checked Response 使其输出为简单的字母X

  3. 我还有一个下拉时区问题,它要求用户从世界上 25 个可用时区中的 1 个中选择他们的时区。我希望他们对可用时间复选框网格的响应进行修改以匹配他们在 GMT 中的响应。因此,例如,如果我选择我的时区为GMT -4,并在我选择的复选框网格中,Google 表格将在on下包含一个X12AM to 1AMSunday7PM to 8PMSaturday

我在这里对 Google Forms + Google Sheets API 要求太多了吗?如果我是,也许有更好的云程序可以用来处理这个问题?

标签: formsapigoogle-sheetsformulagoogle-forms

解决方案


所以@MattKing(Matthew King)昨天与我密切合作,让我的勾选框网格按照我的意图输出到 Google 表格,以及处理时区转换!您可以在此处查看测试结果: https ://docs.google.com/spreadsheets/d/1g5S5Nyfwr8eHWyn-UXVfdbVj8tdZeY-lU20C2VxuCZ8/edit

我首先要提一下,不应修改表单输出表(称为表单响应)。也不需要谷歌 API 脚本来让谷歌表格按照我的意愿格式化表单结果。相反,带有公式的新表格(我可能会添加相当复杂的表格)是要走的路!

  • 输出 1 小时增量 24 小时 7 天:=ARRAYFORMULA(SEQUENCE(1,24*7,0)/24+1)
  • 可以按字母顺序输出“表单响应”(在 A 列中)中的每个名称,如下所示:=QUERY({'Form responses'!B2:C},"select Col1 where Col2 is not null order by Col1")
  • 可以输出“表格回复”(在 E 到 AB 列中)中的可用时间(其中每列是 7 天中的 1 天中的 24 小时中的 1 小时),如下所示:=IF($A4="",,IF(ISNUMBER(MATCH($A4&TEXT(B$2,"ddd hh"),UTCData!$A:$A,0)),"X",))
  • 如果我想在单独的表格中进行单独的会议,并且我在 A1 中有会议名称(在表单中选择为复选框),那么我可以进行设置,以便只有检查该会议的人员的姓名将按如下方式共享:=QUERY({'Form responses'!B2:C},"select Col1 where Col2 Contains'"&A1&"' order by Col1")

他还为我创建了 2 张处理更多公式转换的表格:

  • 扁平表单
    • 扁平化公式: =ARRAYFORMULA(QUERY(SPLIT(FLATTEN('Form responses'!B2:B&"|"&'Form responses'!C2:C&"|"&'Form responses'!D2:D&"|"&MID('Form responses'!E1:AB1,64,20)&"|"&'Form responses'!E2:AB),"|",0,0),"where Col5<>''"))
    • 提取时间: =ARRAYFORMULA(IF(D2:D="",,SPLIT(MID(D2:D,2,LEN(D2:D)-2)," to ",0)))
    • UTC 换算: =ARRAYFORMULA(IFERROR(MOD(MATCH(SPLIT(E2:E,", ",0),TITLE!C10:I10,0),7)+F2:F+C2:C/24))
  • UTC数据表
    • 名称&UTCDayTimeCombos: =ARRAYFORMULA(QUERY(FLATTEN(IF('Flattened Form'!H2:N="",,'Flattened Form'!A2:A&TEXT('Flattened Form'!H2:N,"ddd hh"))),"where Col1<>''"))
    • C2 - C8列中,它列出SundaySaturday

如果您需要有人帮助您处理 Google 表格和表单,我不能再推荐 Matt 的帮助了!


推荐阅读