[英]How to access Spreadsheet from a Google Forms submit trigger function
我在Google Forms脚本中有一个函数,可以向要添加到关联工作表的行中添加唯一ID。 提交表单后触发此功能。
这是我一直在玩的脚本的一个版本:
function onFormSubmit(e) {
// Get the active sheet
var sheet = SpreadsheetApp.getActiveSheet();
// 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)
}
}
在调试时,我收到消息:
TypeError:无法调用null的方法“ getActiveCell”。 (第5行,文件“ CreateID”)
我尝试将代码裁剪为一个简单的setValue
,并且遇到相同的问题-“无法调用方法...”,除了getActiveSheet
之外,几乎所有行都存在。
该函数的触发器工作正常,因为我收到通知以告知该函数本身未能成功执行。 我在网上看过,尝试过一些方法,但目前找不到解决方案。
因此,我真正想要的是访问表单发布到的电子表格的正确方法。 如果SpreadsheetApp.getActiveSheet()不是正确的方法,那是什么?
抱歉,此脚本是全新的,上一次在PLI(!)中编程。 指向现有解决方案或其他解决方案的任何指针,将不胜感激。
提交表单时,触发器功能没有活动的电子表格,也没有活动的单元格。 (它与Sheets UI没有关联,因此这些概念毫无意义。)
但是,事件参数e
将提供有关已由Form添加的行的信息。 查看Google表格事件 :
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”值是表单上的第一个问题,那么它实际上在第2列或e.values[1]
。
随着表单提交将新行插入到工作表中,单元格Z4
可能会继续向您移动。 最好从另一个工作表中获取该值,或者最好还是使用Properties Service对其进行管理。
要利用事件,您需要对其进行仿真以进行测试。 阅读全文如何在GAS中测试触发功能? 。
您需要检查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)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.