Google apps script 可安装触发器以不同形式触发脚本?
我正在尝试运行一个脚本,该脚本在提交不同的表单(B)时连接到一个表单(a)。我有一系列不同的表单,它们是相似的,需要运行相同的脚本,因此我不想把代码复制到每个脚本中,而是想知道这是否可行。 我成功地在A中创建了一个可安装的触发器函数,指向B。当出现提示时,我已授予权限。 当我发布B时,A中的脚本会触发,我会在日志中看到:Google apps script 可安装触发器以不同形式触发脚本?,google-apps-script,triggers,google-forms,Google Apps Script,Triggers,Google Forms,我正在尝试运行一个脚本,该脚本在提交不同的表单(B)时连接到一个表单(a)。我有一系列不同的表单,它们是相似的,需要运行相同的脚本,因此我不想把代码复制到每个脚本中,而是想知道这是否可行。 我成功地在A中创建了一个可安装的触发器函数,指向B。当出现提示时,我已授予权限。 当我发布B时,A中的脚本会触发,我会在日志中看到: Exception: No response with ID 2_ABaOnudSFDkNQOL2Xn4fNOmT95GrTotEW8LSjxfI5qf6qceDN5hD5CH
Exception: No response with ID 2_ABaOnudSFDkNQOL2Xn4fNOmT95GrTotEW8LSjxfI5qf6qceDN5hD5CHKqNT5D4G_DdONWq0 exists for this form.
at onFormAnswerSubmit(Kod:40:20)
停止的行(Kod:40:20)是获取已发布数据的行:
var items = e.response.getItemResponses();
这应该是可行的,还是不可能将发布的数据从一个表单传递到另一个表单中的脚本
或者我还能在扳机上做些什么?就像强迫传递e。还是什么?
以下是我创建的触发器:
/**
* Creates a trigger for when a different form is posted that runs a function in this script (run once)
*/
function createOtherFormTrigger() {
var formID = FormApp.openById("XXXXX"); // form B
ScriptApp.newTrigger('onFormAnswerSubmit') // a function in this script, in form A
.forForm(formID)
.onFormSubmit()
.create();
}
您需要稍微更改逻辑: 在触发器上激发的函数应作为触发器包含在脚本中。 为表单B创建formSubmit触发器的示例代码:
//运行一次
函数createOtherFormTrigger(){
var formB=FormApp.openById(“XXX”);
ScriptApp.newTrigger('onFormAnswerSubmit')//此脚本中的函数,格式为B
.forForm(formB)//活动窗体为formB
.onFormSubmit()
.create();
}
函数onFormAnswerSubmit(e){
var formB=e.来源;
var items=e.response.getItemResponses();//表单B的最新表单响应的项
var formA=FormApp.openById(“XXXX”);//表格A
...
//用表格A做你需要做的事情
}
上面的代码将创建在提交表单B的表单响应时触发的触发器。因此,脚本绑定到表单A、表单B或is都不重要。实际上,在独立脚本中实现这些函数可能是最有意义的,以确保它们不会干扰表单绑定脚本中的其他表单提交触发器。您需要稍微更改逻辑: 在触发器上激发的函数应作为触发器包含在脚本中。 为表单B创建formSubmit触发器的示例代码:
//运行一次
函数createOtherFormTrigger(){
var formB=FormApp.openById(“XXX”);
ScriptApp.newTrigger('onFormAnswerSubmit')//此脚本中的函数,格式为B
.forForm(formB)//活动窗体为formB
.onFormSubmit()
.create();
}
函数onFormAnswerSubmit(e){
var formB=e.来源;
var items=e.response.getItemResponses();//表单B的最新表单响应的项
var formA=FormApp.openById(“XXXX”);//表格A
...
//用表格A做你需要做的事情
}
上面的代码将创建在提交表单B的表单响应时触发的触发器。因此,脚本绑定到表单A、表单B或is都不重要。实际上,在独立脚本中实现这些函数可能是最有意义的,以确保它们不会干扰表单绑定脚本中的其他表单提交触发器。我也有同样的问题。无论我把
e.response
放在哪里,我都会得到同样的错误。看来唯一的解决办法是使用独立脚本而不是有界脚本。我也有同样的问题。无论我把e.response
放在哪里,我都会得到同样的错误。看起来唯一的解决办法是使用独立脚本而不是绑定脚本。表单实际上没有连接到任何工作表,我使用表单端的脚本将数据转储到google文档并发送电子邮件。您不需要将脚本添加(绑定)到其他表单。只要所有内容都在同一个帐户中,任何应用程序脚本文件都可以影响任何其他表单。您只需要表单文件ID就可以获取任何其他表单,并对该表单执行某些操作。应用程序脚本代码可以根据表单的文件ID打开表单。影响表单的脚本文件不需要绑定到它打开的表单。如果希望以编程方式在表单中创建新响应(向表单中添加数据),这是可能的。你不需要在其他表单中创建触发器。这些表单实际上没有连接到任何工作表,我使用表单端的脚本将数据转储到google文档并发送电子邮件。你不需要将脚本添加(绑定)到其他表单。只要所有内容都在同一个帐户中,任何应用程序脚本文件都可以影响任何其他表单。您只需要表单文件ID就可以获取任何其他表单,并对该表单执行某些操作。应用程序脚本代码可以根据表单的文件ID打开表单。影响表单的脚本文件不需要绑定到它打开的表单。如果希望以编程方式在表单中创建新响应(向表单中添加数据),这是可能的。你不需要在其他表单中创建一个触发器。谢谢,我把它做成了一个独立的。谢谢你帮我弄明白逻辑!谢谢,我把它做成了一个独立的。谢谢你帮我弄明白逻辑!