google-apps-script - 为什么我的电子表格没有从外部来源的输入值更改?
问题描述
所以我试图使用外部源(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 函数有替代方法,那么我会全神贯注。我只需要一个可以在我的副本中运行的函数。
解决方案
作为协作努力的一部分,让我澄清一下 Zapier 部分(此答案与复制部分无关)。
第 1 部分。 Zapier 设置
假设您有一个从中提取数据的第三方应用程序(顺便说一句,由于您决定使用应用程序脚本,那么放弃像 Zapier 这样的中间人并连接到 3P 应用程序 API 是否更容易 - 如果有的话,ofc -直接?),您创建了一个Catch Hook和一个POST Action。
POST Action 设置包含几个字段:
URL
字段 - 这是您的/exec
URL 所在的位置(通过 Publish->Deploy as a WebApp 部署 WebApp)。将脚本部署为 WebApp 后,您将获得用户和脚本可以向其发出请求的 URL(它始终采用这种格式https://script.google.com/macros/s/{yourProjectId}/exec
- 由于访问权限的原因,略有不同)。为避免权限问题,请将谁有权访问应用程序选项设置为任何人或任何人,甚至是匿名的(否则,您必须设计身份验证处理)。Payload Type
字段在这里无关紧要,但我建议使用JSON
.Data
如果您选择了POST 操作,则该字段是必需的,并且应该包含您希望通过 Zapier 传输的数据的键值对(数据将在事件对象parameter
的/parameters
属性中可用)。
第 2 部分。WebApp 设置
已发布的 WebApp 应具有一个doGet()
或doPost()
功能,以便能够接收和处理请求(或两者兼有)。它们中的每一个都接受一个特殊的参数,每次向 WebApp 发出请求时都会构造该参数——一个事件对象。
事件对象将包含您从 Zapier 发送的所有数据。doGet
然后,您可以使用这些数据有条件地触发不同的函数、将数据传递给处理程序等。因此,您可以创建一个在/内部调用的函数,而不是依赖触发器,doPost
这将 a) 用新值填充目标工作表;b) 之后做任何其他事情,从而充当onEdit
/的类似物onChange
。
有用的链接
推荐阅读
- java - 焊接依赖注入问题
- powershell - 如何使用powershell下载windows补丁?
- cloudkit - CloudKit 比较记录更改标签
- netsuite - 从 Netsuite 装箱单 freemarker 访问包裹信息
- r - 行尾的额外逗号导致 read.csv 和 read.table 出错
- javascript - 可观察到的事件
- javascript - 当父状态改变时如何防止子组件重新加载
- iframe - 减小 iframe 大小
- npm - 为什么 npm install 不构建依赖项?
- python - 使用条件过滤器对 pandas groupby 进行矢量化