Form answer Spreadsheet - onChange trigger(表单答案电子表格-onChange触发器)
问题描述
我想问一下在Google Form在电子表格中进行更改后如何运行onChange触发器。
我有更改后发送电子邮件的源代码:
function onChange(e){
var sheet = SpreadsheetApp.getActiveSheet();
var helpRange = sheet.getRange(2, 16);
var debugRange = sheet.getRange(2,17);
var startRow = helpRange.getValue();
var numRows = sheet.getLastRow() - startRow + 1; // Number of rows to process
debugRange.setValue(numRows);
var dataRange = sheet.getRange(startRow, 1, numRows, 11);
var data = dataRange.getValues();
var cal = CalendarApp.getDefaultCalendar();
for (i in data) {
var row = data[i];
var title = row[3];
var desc = "Description: " + row[4] + " Requested Accounts: " + row[5] + " Marketing Support: " + row[6] + " Responsible Salesman " + row[8] + " Email: " + row[9] + " " + row[10]; // Second column
var tstart = row[1];
var tstop = row[2];
var loc = row[7];
cal.createEvent(title, new Date(tstart), new Date(tstop), {description:desc,location:loc});
helpRange.setValue(sheet.getLastRow() + 1);
var emailAddress = sheet.getRange(sheet.getLastRow(), 10).getValue();
var subject = "New Event Created: " + title;
Browser.msgBox(emailAddress + " " + subject + " "+ desc);
MailApp.sendEmail(emailAddress, subject, desc);
}
}
此电子表格应由Google表单自动填写(当用户提交答案时),其他用户不得对其进行任何更改。此onChange触发器在我每次进行物理更改时都会触发(不出所料,但这不会发生),但当我从Google表单提交答案时,它也会显示在电子表格中,但onChange触发器不会触发。
为什么?
我是否可以编写它,以便在Google Form进行更改后触发触发器?
推荐答案
有四个要点可以了解它不起作用的原因:
- 正如Ryan-Roth所说,在这种情况下使用的方法是
onFormSubmit()
。 - 此方法必须在Installable Trigger中使用,因此您必须通过Apps脚本仪表板或使用ScriptApp服务以编程方式创建它,这是我推荐的,因为它更容易理解所发生的事情。下面的代码是为这种情况创建触发器的函数示例:
function createTriggerFunction(){
//Get the target spreadsheet
var ss = SpreadsheetApp.openById('XXXXXXXXXXXX');
//Create a new trigger using ScriptApp service passing your function as parameter
ScriptApp.newTrigger("yourMailFunction")
.forSpreadsheet(ss)
.onFormSubmit()
.create()
}
现在,要安装此新触发器,您必须在Google App脚本编辑器的Select Function列表中选择
createTriggerFunction()
并运行一次,否则每次运行它时都会创建相同的触发器。这一点对此很重要:覆盖函数用于简单的触发器,在这种情况下为onChange()和onFormSubmit()are not。因此,在本例中,您的代码将在名为
yourMailFunction
的新函数中工作,以用于本例。
function yourMailFunction(e){
var sheet = SpreadsheetApp.openById('XXXXXXXXXXXX');
...
}
}
重要信息
请注意,我使用的是SpreadsheetApp.openById('XXXXXXXXXXXX')
,而不是SpreadSheetApp.getActiveSheet()
。这一点非常重要,因为当表单提交并在关联的电子表格中插入新行时,没有活动的电子表格,因此您必须按其ID调用它。
这篇关于表单答案电子表格-onChange触发器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:表单答案电子表格-onChange触发器
基础教程推荐
- 我什么时候应该在导入时使用方括号 2022-01-01
- 响应更改 div 大小保持纵横比 2022-01-01
- 动态更新多个选择框 2022-01-01
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06
- 在for循环中使用setTimeout 2022-01-01
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01