我“对飞”在电子表格中使用的数据创建谷歌的形式。 此外,我在安装提交表单事件触发。
ScriptApp.newTrigger('onSubmit')
.forForm(form)
.onFormSubmit()
.create();
的onsubmit功能放置在电子表格的脚本,因为没有办法指向在窗体的一侧的功能(我做存在形式与脚本代码的副本,但它是没有用的,因为我不能作出这样的功能运行)。
嗯,我在处理电子表格侧提交事件。 没问题。 但是,当我试图让“E”对象的来源:
function onSubmit(e) {
var response, items, i, item, hash, answer, id;
var sheet, arr, source;
sheet = SpreadsheetApp.openById(RESPONSE_SS_ID).getSheetByName(RESPONSE_SHEET);
response = e.response;
source = e.source;
Logger.log(e);
...
我得到的不是promissed在Form对象手动 ,但电子表格对象
Logger.log([{response=FormResponse, source=Spreadsheet, triggerUid=4071774310898422364, authMode=FULL}
也许,我做错了什么? 如何正确获取表单源在这种情况下?
显然,形式并不表现为它的文件说,确实如此,这已经被证明谷歌代码问题4810
幸运的是,至少有一个解决办法,在关于这个问题,这是使用响应getEditResponseUrl方法来获得的形式发表了。 下面是我的实施,修复了事件对象添加缺少的源函数的形式修复:
function fixBrokenEvent (event) {
if (! event.source ) {
var responseEditUrl = event.response.getEditResponseUrl(); //gets edit response url which includes the form url
var responseUrl = responseEditUrl.toString().replace(/viewform.*/,''); //returns only the form url
event.source = FormApp.openByUrl(responseUrl); //gets the submitted form id
}
return event
}
此解决办法是卓有成效的我。 另一种解决方案是使用触发UID并通过触发器从ScriptApp.getProjectTriggers()为正确的触发UID搜索列表。
就像是...
function fixEventWithTriggers (event) {
ScriptApp.getProjectTriggers().forEach(function (trigger) {
if (trigger.getUniqueId()==event.triggerUid) {
event.source = FormApp.openFormById(trigger.getSourceId())
return event
}
}
}
这最后的解决办法来自评论#5 期3786