在 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 脚本 - 将一行数据从一个电子表格移动到另一个电子表格
使用 Apps 脚本在带有日期的 Google 电子表格中存档