在 Google Apps 脚本中从另一个电子表格编辑一个电子表格

时间:2021-03-31 08:15:29

标签: javascript google-apps-script google-sheets libraries

问题

如何从一个由 onEdit 命令触发的连接脚本编辑两个不同的电子表格?

我的案例

我正在尝试创建一个主电子表格,用于向另外两个电子表格发送和删除信息。我有一个 onEdit 功能,一旦选中一个复选框,它就会将指定的信息发送到另一个工作表。

我的尝试

为了打开另一个电子表格,我首先尝试了 openByID 函数,但通过一些研究,我认为不可能通过绑定到电子表格的脚本编辑另一个电子表格。所以我创建了一个独立的脚本(名为 MasterF),我将其部署为一个库来存储我的函数,以便我以后可以调用它。我将该库添加到主电子表格并使用它来调用该函数,但它不断抛出错误,提示“您无权调用 SpreadsheetApp.openById”。我的所有应用程序脚本都拥有编辑、删除等的完全权限。我还从绑定到我想要连接的其他电子表格的脚本中创建了库,并将这些库添加到 MasterF 库中以查看是否有帮助。尽管尝试使用独立脚本,但在打开编辑功能时我仍然收到相同的错误消息。也许我错过了什么,或者我完全有可能做不到我想做的事情。

脚本

这是我创建的自定义函数的开始。本质上,当 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 库中的数据发送函数。

function onEdit(e) {
  var sheetName = "Submit"
  var range = e.range;

  if (range.getSheet().getSheetName() == sheetName && range.getA1Notation() == 'K23' && range.isChecked()) {
    MasterF.DataSend();
  }
}

1 个答案:

答案 0 :(得分:0)

要从一个由 onEdit 命令触发的连接脚本编辑两个不同的电子表格,您需要安装触发器。一个简单的触发器没有编辑多个电子表格所需的权限。 Ref。在我的问题中,我试图使用一个独立的脚本和多个库。这是不必要的。从单个脚本编辑多个电子表格所需的只是一个可安装的触发器。

就我而言,我使用以下函数来创建可安装的触发器:

function EditTrigger() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  ScriptApp.newTrigger('Edit') 
    .forSpreadsheet(ss)
    .onEdit()
    .create();
}

'Edit' 是我用来检测第一个电子表格中所做更改的 onEdit 函数的名称。如果 onEdit 函数中的 If 语句为真,则它运行一个单独的函数来编辑两个不同的电子表格。编写 EditTrigger() 函数后,在应用程序脚本中手动运行它并在必要时接受权限。现在,当 onEdit 函数 ('Edit') 被触发时,它应该能够编辑多个电子表格。

相关问题