Google sheets =处理通过Google表单提交的数据时的查询语法

Google sheets =处理通过Google表单提交的数据时的查询语法,google-sheets,google-forms,Google Sheets,Google Forms,下面的查询逐行“工作”(手动填写时),但在将新数据添加到“响应表”时不会“自动填写”。添加到“回复表”的数据来自谷歌表单 =QUERY(Sheet2!$A$1:K; CONCATENATE("SELECT B, C WHERE A = ", responses!B1), 0) 问题 One-如何调整此查询,以便在通过谷歌表单将新数据添加到“回复表”时自动填充 如果不可能,有什么建议吗 感谢您的时间和帮助, 托德 高中老师你可以绕过这个问题的一种方法是使用 可以设置一个OneEdit函数,在添

下面的查询逐行“工作”(手动填写时),但在将新数据添加到“响应表”时不会“自动填写”。添加到“回复表”的数据来自谷歌表单

=QUERY(Sheet2!$A$1:K; CONCATENATE("SELECT B, C WHERE A = ", responses!B1), 0)
问题
One-如何调整此查询,以便在通过谷歌表单将新数据添加到“回复表”时自动填充

如果不可能,有什么建议吗

感谢您的时间和帮助,
托德

高中老师

你可以绕过这个问题的一种方法是使用

可以设置一个OneEdit函数,在添加新数据时将公式添加到所需的单元格中

使用一段非常快速的代码(如下)。这将在电子表格更新时应用您的公式

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ws = ss.getSheetByName("responses");
  var lastRow = ws.getLastRow();
  var studentID = ws.getRange(lastRow, 4).setFormula('=QUERY(Sheet2!$A$1:K; CONCATENATE("SELECT B, C WHERE A = ", responses!B'+lastRow+'), 0)');
}
我已经复制了您的电子表格,并在这里进行了设置->您只需将一个新的学生ID复制到B列中即可对其进行测试,并查看学生信息是否从第二张表格中提取出来。

另一个选项是使用。这将在提交表单时自动填充列。所以在第2行:

=ArrayFormula(iError(VLOOKUP(B2:B;Sheet2!A2:C;符号(B2:B行))*{2,3};0))

或者,您可以在第1行中输入,这也将填充标题,并且在某些情况下插入/删除行时会稍微更加防水:


=ArrayFormula(如果(A:A行)=1;{“名”、“姓”};IFERROR(VLOOKUP(B:B;Sheet2!A2:C;符号(B:B行))*{2,3};0))

vletech,谢谢!这个解决方案确实有效,但看起来只有当页面“重新加载”时,电子表格才会“更新”查询数据。我尝试进入脚本编辑器并更新页面,但只更新了“最后”行。如果文档已由3次新表单提交更新,则只有最后一次(最近一次)更新为=查询。是否有任何建议1)使其自动化,2)让其更新所有编辑,而不仅仅是最后一次编辑?谢谢哦,对不起,我没有意识到在一次点击中会有多个条目。好的,快速思考一下,另一种方法是迭代电子表格中的所有行(当它发生变化时),如果该单元格中没有公式,则添加它。至于不自动更新,我把函数搞错了,不是onEdit,应该是onChange。很抱歉。您是否知道您可能已将个人数据(教师的姓名和电子邮件地址)公开?或者他们都是为这个例子而编造的?(他们似乎不是)