我创建了一个Google表单,该表单链接到包含两张表的Google电子表格。我还在Google Scripts中创建了一个名为" handleFormSubmission"的函数,在触发时(在提交链接表单时):
从第一页创建一个包含此提交值的变量:var s0Row = s0.getRange("A"+(s0Last)+":J"+(s0Last)).getValues();
然后,如果两张纸上都符合匹配的ID条件,请将第一张纸的值设置为第二张纸上的相应范围:s1Row.setValues(s0Row);
可能有更好的方法可以做到这一点,但是现在这个功能在从Google脚本运行时工作正常,而且表单正在将提交内容返回到第一页。
我遇到的问题是在提交链接表单时触发此功能。我已经尝试设置此触发器,因为您将在下面的屏幕截图中看到。
代码
function handleFormSubmission() {
var ss = SpreadsheetApp.openById("1FmArzo50IV2Wmykgsa89l_EARjzkiyeFDoPaCjGyBZM");
SpreadsheetApp.setActiveSpreadsheet(ss);
var sheet = SpreadsheetApp.getActive();
var s0 = sheet.getSheets()[0];
var s0Last = s0.getLastRow();
var s1 = sheet.getSheets()[1];
var s1Last = s1.getLastRow();
var s0Bid = s0.getRange(s0Last, 10).getValue();
var s0Row = s0.getRange("A"+(s0Last)+":J"+(s0Last)).getValues();
for (var i = 2; i < s1Last + 1; i++) {
var s1Bid = s1.getRange(i, 10).getValue();
var s1First = s1.getRange(i, 2).getValue();
var s1LastName = s1.getRange(i, 3).getValue();
var s1Row = s1.getRange("A"+(i)+":J"+(i));
if (s0Bid === s1Bid) {
Logger.log(i + " " + s1First + s1LastName);
Logger.log("s0: " + s0Bid);
Logger.log("s1: " + s1Bid);
Logger.log("Match!");
s1Row.setValues(s0Row);
Logger.log("----------------------");
break;
} else {
Logger.log(i + " " + s1First + s1LastName);
Logger.log("s0: " + s0Bid);
Logger.log("s1: " + s1Bid);
Logger.log("Nope...");
Logger.log("----------------------");
}
};
};`
当前项目的触发器
答案 0 :(得分:2)
这绝对是电子表格中你正在拦截的一个事件,尽管这看似违反直觉。
我遇到了同样的问题&amp;通过删除触发器,创建脚本的新版本,然后重新创建触发器来解决它。不知道它为什么会起作用 - 也许GAppsScript专家可以向我们解释它。
另外,为什么不从事件对象中获取表单提交值?因此,您可以从事件对象中访问所需的字段,而不是搜索工作表[0]的最后一行(在极端情况下,可能不是您要查找的提交,而是下一个)使用以下任何一种:
e.values
(表单值的数组按电子表格中显示的顺序排列)e.namedValues
(表单值的字典/哈希)答案 1 :(得分:1)
我认为该事件应该是“从表单”而不是“从电子表格”。那是因为您正在处理从电子表格打开的脚本编辑器。当您从表单中打开脚本编辑器并在该编辑器中编写该函数时,它会填充。希望有所帮助!