下面的查询逐行“工作”(手动填写时),但当新数据添加到“回复表”时,它不会“自动填写”。添加到“回复表”的数据来自 Google 表单。
=QUERY(Sheet2!$A$1:K; CONCATENATE("SELECT B, C WHERE A = ", responses!B1), 0)
问题
一- 如何调整此查询,以便在 Google 表单将新数据添加到“回复表”时“自动填充”?
如果这不可能,有什么建议吗?
感谢您的时间和帮助,
托德
高中老师
下面的查询逐行“工作”(手动填写时),但当新数据添加到“回复表”时,它不会“自动填写”。添加到“回复表”的数据来自 Google 表单。
=QUERY(Sheet2!$A$1:K; CONCATENATE("SELECT B, C WHERE A = ", responses!B1), 0)
问题
一- 如何调整此查询,以便在 Google 表单将新数据添加到“回复表”时“自动填充”?
如果这不可能,有什么建议吗?
感谢您的时间和帮助,
托德
高中老师
另一种选择是使用VLOOKUP 作为数组公式应用。这将在提交表单时自动填充列。所以在第2行:
=ArrayFormula(IFERROR(VLOOKUP(B2:B;Sheet2!A2:C;SIGN(ROW(B2:B))*{2,3};0)))
或者您可以在第 1 行中输入它,这也将填充标题,并且在某些情况下插入/删除行时会更加紧密:
=ArrayFormula(IF(ROW(A:A)=1;{"First Name","Last Name"};IFERROR(VLOOKUP(B:B;Sheet2!A2:C;SIGN(ROW(B:B))*{2,3};0))))
解决此问题的一种方法是使用Google App Script (GAS)。
可以设置一个 onEdit 函数,在添加新数据时将公式添加到所需的单元格中。
使用非常快速的代码(如下)。这将在电子表格更新时应用您的公式。
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)');
}
我已经复制了您的电子表格并在此处设置 -> LINK您只需将新的学生 ID 复制到 B 列即可对其进行测试,然后查看学生信息是从第二张表中提取的。