【发布时间】:2021-06-27 05:48:40
【问题描述】:
问题
如何从一个由 onEdit 命令触发的连接脚本编辑两个不同的电子表格?
我的情况
我正在尝试创建一个主电子表格,用于向另外两个电子表格发送和删除信息。我有一个 onEdit 功能,一旦选中了一个复选框,它就会将指定的信息发送到另一个工作表。
我的尝试
为了打开另一个电子表格,我首先尝试了 openByID 函数,但经过一些研究,我认为不可能通过绑定到电子表格的脚本来编辑另一个电子表格。所以我创建了一个独立的脚本(名为 MasterF),我将它部署为一个库来存储我的函数,以便以后调用它。我将库添加到主电子表格并使用它来调用该函数,但它一直抛出一个错误,说“您没有调用 SpreadsheetApp.openById 的权限”。我所有的应用程序脚本都具有编辑、删除等的完全权限。我还从绑定到我想要连接的其他电子表格的脚本中创建了库,并将这些库添加到 MasterF 库中,看看是否有帮助。尽管尝试使用独立脚本,但在 on edit 功能时我仍然收到相同的错误消息。也许我错过了什么,或者我完全有可能做不到我想做的事情。
脚本
这是我创建的自定义函数的开始。本质上,当触发 onEdit 函数时,“提交”表中的电子表格 1 中的数据会传输到“仪表板”表中的电子表格 2。
function DataSend() {
var app = SpreadsheetApp;
var ss = app.getActiveSpreadsheet();
var submit = ss.getSheetByName("Submit");
var selldata = submit.getRange('E23:I23').getValues();
//@NotOnlyCurrentDoc
var dash = app.openById(<sheetid>).getSheetByName("Dashboard");
这是脚本中绑定到电子表格 1(不直接属于 MasterF 库的一部分)的 onEdit 函数,它触发保存在 MasterF 库中的 datasend 函数。
function onEdit(e) {
var sheetName = "Submit"
var range = e.range;
if (range.getSheet().getSheetName() == sheetName && range.getA1Notation() == 'K23' && range.isChecked()) {
MasterF.DataSend();
}
}
【问题讨论】:
-
虽然我不确定我是否能正确理解您的情况,但在您的情况下,当使用可安装的 OnEdit 触发器而不是简单触发器时,您会得到什么结果? Ref
-
您不能使用简单的 onEdit 触发器编辑另一个电子表格,因为它需要授权,这是对简单触发器的限制。按照@Tanaike 的建议将其更改为可安装的触发器,这应该没有问题。
-
谢谢@Tanaike 和 Rafa,我的思路是错误的,在这种情况下你不需要独立的脚本。我安装了一个可安装的触发器,但它仍然不起作用。我最终通读了我写的每一行,问题是无关的——我在 IF 语句中使用了“”。该脚本现在工作正常,我将添加一个答案。
标签: javascript google-apps-script google-sheets libraries