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

Editing one Spreadsheet from another Spreadsheet in Google Apps Script

问题

如何从一个由 onEdit 命令触发的连接脚本编辑两个不同的传播sheet?

我的案例

我正在尝试创建一个主传播sheet,用于向其他两个传播sheet发送和删除信息。我有一个 onEdit 函数,一旦复选框被选中,它就会将指定的信息发送到另一个 sheet.

我试过的

打开另一个跨页sheet 我首先尝试了 openByID 函数,但通过一些研究我认为不可能通过绑定到的脚本编辑另一个跨页sheet点差sheet。因此,我创建了一个独立脚本(名为 MasterF),我将其部署为一个库来存储我的函数,以便稍后调用它。我将库添加到 master spreadsheet 并使用它来调用该函数,但它一直抛出错误消息“您没有调用 SpreadsheetApp.openById 的权限。”我所有的应用程序脚本都具有编辑、删除等的完全权限。我还从绑定到我想连接的其他传播sheets 的脚本中创建了库,并将这些库添加到 MasterF 库中以查看如果那会有所帮助。尽管尝试使用独立脚本,但在编辑功能时我仍然收到相同的错误消息。也许我错过了什么,或者完全有可能我做不到我想做的事。

脚本

这是我创建的自定义函数的开头。本质上,当触发 onEdit 函数时,来自“提交”sheet 中的 spreadsheet1 的数据被传输到“仪表板”sheet 中的 spreadsheet2。

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");

这是绑定到spreadsheet1(不直接是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();
  }
}

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

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

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

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