首页 > 解决方案 > 为什么我的电子表格没有从外部来源的输入值更改?

问题描述

所以我试图使用外部源(Zapier)将值输入到我的电子表格中。然后将这些输入值“转置(公式明智)”到我的电子表格中,以适应它们要对齐的单元格坐标。

我将电子表格设置为运行“onEdit”,当这些传入值到达时,它应该会导致电子表格的其余部分发生变化,但该函数没有运行。

但是,如果我要“手动”编辑电子表格,onEdit 函数会完美运行。

那么,当外部源带来其输入值时,为什么电子表格不会运行该函数呢?

更新:

所以我发现如果我手动授权一个“onChange”可安装触发器,它就会起作用。但是,如果我创建相同电子表格的副本,则副本中将不存在可安装触发器。副本需要有触发器,而无需我手动执行。因此,我尝试在 Google 脚本编辑器中创建一个代码,该代码将允许我使用 onChange 函数或在 Developer Hub 中安装 onChange 函数。有什么想法吗?这是我试过但没有用的代码:

var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("My 
     Sheet") 

var ssid = "My SpreadSheet ID"; 
     ScriptApp.newTrigger('My Sheet) 
    .forSpreadsheet(ss.getId()) 
    .onChange() 
    .create(); 

    myFunction()
    {

如果 onChange 函数有替代方法,那么我会全神贯注。我只需要一个可以在我的副本中运行的函数。

标签: google-apps-scriptgoogle-sheets

解决方案


作为协作努力的一部分,让我澄清一下 Zapier 部分(此答案与复制部分无关)。

第 1 部分。 Zapier 设置

假设您有一个从中提取数据的第三方应用程序(顺便说一句,由于您决定使用应用程序脚本,那么放弃像 Zapier 这样的中间人并连接到 3P 应用程序 API 是否更容易 - 如果有的话,ofc -直接?),您创建了一个Catch Hook和一个POST Action

POST Action 设置包含几个字段:

  1. URL字段 - 这是您的/execURL 所在的位置(通过 Publish->Deploy as a WebApp 部署 WebApp)。将脚本部署为 WebApp 后,您将获得用户和脚本可以向其发出请求的 URL(它始终采用这种格式https://script.google.com/macros/s/{yourProjectId}/exec- 由于访问权限的原因,略有不同)。为避免权限问题,请将谁有权访问应用程序选项设置为任何人任何人,甚至是匿名的(否则,您必须设计身份验证处理)。
  2. Payload Type字段在这里无关紧要,但我建议使用JSON.
  3. Data如果您选择了POST 操作,则该字段是必需的,并且应该包含您希望通过 Zapier 传输的数据的键值对(数据将在事件对象parameter的/parameters属性中可用)。

第 2 部分。WebApp 设置

已发布的 WebApp 应具有一个doGet()doPost()功能,以便能够接收和处理请求(或两者兼有)。它们中的每一个都接受一个特殊的参数,每次向 WebApp 发出请求时都会构造该参数——一个事件对象

事件对象将包含您从 Zapier 发送的所有数据。doGet然后,您可以使用这些数据有条件地触发不同的函数、将数据传递给处理程序等。因此,您可以创建一个在/内部调用的函数,而不是依赖触发器,doPost这将 a) 用新值填充目标工作表;b) 之后做任何其他事情,从而充当onEdit/的类似物onChange

有用的链接

  1. 事件对象结构;
  2. 传递事件对象;
  3. 在其他文档上创建触发器;

推荐阅读