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

Posted

技术标签:

【中文标题】在 Google Apps 脚本中从另一个电子表格编辑一个电子表格【英文标题】:Editing one Spreadsheet from another Spreadsheet in Google Apps Script 【发布时间】: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 语句中使用了“”。该脚本现在工作正常,我将添加一个答案。 【参考方案1】:

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

在我的例子中,我使用了以下函数来创建一个可安装的触发器:

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

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

【讨论】:

以上是关于在 Google Apps 脚本中从另一个电子表格编辑一个电子表格的主要内容,如果未能解决你的问题,请参考以下文章

仅通过 Google Apps 脚本值修改 Google 电子表格

Google Apps 脚本 - 将一行数据从一个电子表格移动到另一个电子表格

如何保护 Google 电子表格中的 Apps 脚本代码?

使用 Apps 脚本在带有日期的 Google 电子表格中存档

如何使用 Google Apps 脚本在电子表格中查找按钮的位置?

如何从 Google 电子表格中的 Google Apps 脚本自动更新“站点地图”功能?