首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >触发其他脚本的脚本

触发其他脚本的脚本
EN

Stack Overflow用户
提问于 2015-10-26 13:55:44
回答 1查看 1.2K关注 0票数 1

我有几个谷歌表单,它们使用onFormSubmit触发器将提交的结果推入一个“主”Google (不同的文件)中,使用setValues来合并对表单的所有响应。这个“主”电子表格在其他列中对表单的结果进行一些数据处理,并将数据踢到另一个电子表格中。但是,我想不出如何将表单提交连接到“主”电子表格的脚本。

我最初假设表单的setValues函数onFormSubmit (我用来将表单的结果推到“主”)中会触发“主”表中的onEdit,但是快速搜索显示情况并非如此。因为它们在不同的项目中,我不知道表单的onFormSubmit脚本是否可以调用“主”电子表格项目中的函数。我读到过onChange()触发器并不适用于这样做,尽管Google声明它这样做了。

我不想用计时器更新。有关于让一个工作表的脚本自动启动另一个工作表的脚本的提示吗?

EN

回答 1

Stack Overflow用户

发布于 2015-10-26 16:15:31

正如您已经发现的,事件触发器是调用脚本的一种非常优雅的方法。将它们应用于脚本间通信的不幸的缺点是,没有支持IPC的特定触发器。自2012年以来(对于绑定到同一文档的脚本),第2231期一直有这样的功能的公开请求。

您的选择是利用现有的触发器或模拟一个网络应用程序。

IPC的现有电子表格触发器

Open显然不适用,所以我们跳过它。

  • 提交表格(有用) 您说“主”电子表格中的脚本在其他列中对表单的结果进行了一些数据处理,并将数据踢到另一个电子表格中。如果该数据是行的,那么您可以通过编程方式向子服务器电子表格提交表单响应。这将允许您在那里使用表单提交触发器函数来启动任何进一步的处理。 例如,该函数将两个答案从“主”表单复制到子表单中,并模拟提交: /** *主表单提交触发器函数。处理“主”表单响应并*通过模拟subForm提交将数据传递给subForm。**出发地:https://stackoverflow.com/questions/33347541 */ onSubmit( E){ // Base的辅助处理脚本的表单("subForm") var subFormID =“//在本例中,我们只是将值从Master传递到子窗体。var subForm = FormApp.openById(subFormID);var subForm= subForm.getItems();var subResponse = subForm.createResponse() FormApp.openById //模拟带有人工响应的用户表单提交。subResponse.submit();} 在这里,子表单有两个文本项,并且不管主表单项类型是什么。由于子表单不开放供人进行交互,这简化了代码。
  • onEdit (无用) 正如您所遇到的,此触发器仅响应于手动编辑单元格内容,因此它与IPC无关。
  • onChange (无用) 此触发器响应电子表格结构以及内容(编辑)中的更改,但不响应以编程方式生成的内容。在问题2751三二九九以及最重要的是修复四五六八之前,您将无法使用onChange触发器在脚本之间进行通信。

Web应用程序

主脚本中的表单提交触发器函数可以通过附加到子表的web应用程序更新辅助电子表格。如何直接发布到Google表单中显示了这样一个web应用程序的例子。

假设子脚本按原样使用该脚本,主表单处理程序可以这样做:

代码语言:javascript
复制
/**
 * Master form submission trigger function. Processes "master" form responses and passes data on
 * to subSheet by calling a web app.
 *
 * From: https://stackoverflow.com/questions/33347541
 */
function onSubmit( e ) {
  // Base URL of secondary processing script's form ("subForm")
  var subSheetWebAppURL = "https://script.google.com/macros/s/--APP-ID--/exec";

  // Process master form submission here...

  // In this example, we're just passing values from Master through to the sub-sheet.
  var a = UrlFetchApp.fetch(subSheetWebAppURL
                            + "?col1="+e.values[1]
                            + "&col2="+e.values[2]
                           );
}

在这种方法中,在存储数据之前,web应用程序将在子表中进行任何需要的处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33347541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档