答案 0 :(得分:2)
提交表单时,触发器功能没有活动的电子表格,也没有活动的单元格。 (它与Sheets UI无关,因此这些概念毫无意义。)
但是,事件参数e
将提供有关表单添加的行的信息。见Google Sheets events:
e.range
包含一个Range对象,其中包含已触发您的函数的表单提交填充的单元格。您可以从那里回溯以获取表格。
sheet = e.range.getSheet();
你的功能变成这样:
function onFormSubmit(e) {
// Get the active sheet
var sheet = e.range.getSheet();
// Get the active row
var row = e.range.getRowIndex();
// Get the next ID value.
var id = sheet.getRange("Z4").getValue();
// Check of ID column is empty
if (sheet.getRange(row, 1).getValue() == "") {
// Set new ID value
sheet.getRange(row, 1).setValue(id);
sheet.getRange("Z4").setValue("Z4"+1)
}
}
现在,您还有其他问题要处理。
sheet.getRange(row, 1).getValue()
没有必要;该值刚刚以e.values[0]
传递给您。
但是,在表单提交时,第一列包含时间戳,因此它不会是空的。如果你的" ID" value是表单上的第一个问题,然后它实际上在第2列,或e.values[1]
。
单元格Z4
可能会向您移动,因为表单提交会在表单中插入新行。从不同的工作表中提取该值会更好 - 或者更好地使用“属性服务”来管理它。
要使用该事件,您需要模拟它以进行测试。阅读How can I test a trigger function in GAS?。
答案 1 :(得分:-2)
您需要检查getActiveSheet()
是否成功。
function onFormSubmit(e) {
// Get the active sheet
var sheet = SpreadsheetApp.getActiveSheet();
if (!sheet) { // No active sheet, nothing to do
return;
}
// Get the active row
var row = sheet.getActiveCell().getRowIndex();
// Get the next ID value.
var id = sheet.getRange("Z4").getValue();
// Check of ID column is empty
if (sheet.getRange(row, 1).getValue() == "") {
// Set new ID value
sheet.getRange(row, 1).setValue(id);
sheet.getRange("Z4").setValue("Z4"+1)
}
}