Javascript 有没有办法在脚本所有者';授权书?

Javascript 有没有办法在脚本所有者';授权书?,javascript,google-sheets-api,Javascript,Google Sheets Api,我有一个谷歌表单,它是一个由许多经销商输入的订单主数据库。因此,此母版图纸必须具有有限的编辑权限。我想创建一些其他表(每个经销商一个),他们可以通过这些表输入订单,并通过这些表中运行的脚本添加到我的主表中。这可能吗?当我尝试这样做时,它拒绝他们访问主控表。有办法解决这个问题吗?我在解决这个问题时使用的一种解决方法是设置一个以固定时间间隔运行的 可安装触发器在触发器权限的所有者上运行,因此它将能够访问主电子表格以及每个经销商的电子表格。诀窍是给一个函数分配一个定时触发器,该函数检查每个经销商的工作

我有一个谷歌表单,它是一个由许多经销商输入的订单主数据库。因此,此母版图纸必须具有有限的编辑权限。我想创建一些其他表(每个经销商一个),他们可以通过这些表输入订单,并通过这些表中运行的脚本添加到我的主表中。这可能吗?当我尝试这样做时,它拒绝他们访问主控表。有办法解决这个问题吗?

我在解决这个问题时使用的一种解决方法是设置一个以固定时间间隔运行的

可安装触发器在触发器权限的所有者上运行,因此它将能够访问主电子表格以及每个经销商的电子表格。诀窍是给一个函数分配一个定时触发器,该函数检查每个经销商的工作表是否有更新,然后对主电子表格进行适当的更改。您需要确保触发器不会运行太长时间或运行太频繁,因为您有一个触发器

如下所示:

function myTrigger() {
  var time = new Date();
  // maybe check to see if it's night or other times that dealers won't update
  // that way you can return early and don't waste quota hours

  var dealerSpreadsheetIds = ["id1", "id2", ...];
  var dealerSheetName = "Deals";

  for (var i = 0; i < dealerSpreadsheetIds.length; i++) {
    var sheet = SpreadsheetApp.openById(dealerSpreadsheetIds[i]).getSheetByName(dealerSheetName);
    // check Deals sheet ranges for updates
    // if there is an update, update the main spreadsheet
  }
}
函数myTrigger(){
变量时间=新日期();
//也许检查一下,看看是晚上还是其他时间经销商不会更新
//这样你就可以早点回来,而且不会浪费时间
var DealersPreadsheetID=[“id1”、“id2”、…];
var dealerSheetName=“交易”;
对于(变量i=0;i
我用于解决此问题的一个解决方法是将设置为按固定时间间隔运行

可安装触发器在触发器权限的所有者上运行,因此它将能够访问主电子表格以及每个经销商的电子表格。诀窍是给一个函数分配一个定时触发器,该函数检查每个经销商的工作表是否有更新,然后对主电子表格进行适当的更改。您需要确保触发器不会运行太长时间或运行太频繁,因为您有一个触发器

如下所示:

function myTrigger() {
  var time = new Date();
  // maybe check to see if it's night or other times that dealers won't update
  // that way you can return early and don't waste quota hours

  var dealerSpreadsheetIds = ["id1", "id2", ...];
  var dealerSheetName = "Deals";

  for (var i = 0; i < dealerSpreadsheetIds.length; i++) {
    var sheet = SpreadsheetApp.openById(dealerSpreadsheetIds[i]).getSheetByName(dealerSheetName);
    // check Deals sheet ranges for updates
    // if there is an update, update the main spreadsheet
  }
}
函数myTrigger(){
变量时间=新日期();
//也许检查一下,看看是晚上还是其他时间经销商不会更新
//这样你就可以早点回来,而且不会浪费时间
var DealersPreadsheetID=[“id1”、“id2”、…];
var dealerSheetName=“交易”;
对于(变量i=0;i
实际上我想做相反的事情,意思是让经销商工作表运行触发器并更新主工作表。不过,我还是会试试你的建议。如何设置触发器运行的时间?抱歉,如果我问了一个非常基本的问题-我以前从未使用过可安装触发器。不用担心。在脚本文件中,单击资源>当前项目的触发器。将打开一个对话框,您可以在其中单击“添加新触发器”。应该在触发器表中添加一行,您可以在其中选择要“运行”的脚本和要触发脚本的“事件”。在“事件”列中选择“时间驱动”。然后选择计时器计划和执行脚本的频率。如果需要,您可以让经销商运行脚本,将其更新存储到他们有编辑权限的隐藏工作表中,从而使他们看起来像是在更新主数据库。该表可以像办公室的发件箱一样工作,秘书(您的定时脚本)可以访问需要移动表单的所有区域,但员工不一定需要访问。我提出了隐藏表作为发件箱的相同概念。因此,当经销商提交订单时,它就位于这个隐藏的表单中,直到主表单中的脚本运行并“获取”该订单。它工作得很好。一旦我在主控表中设置定时触发器,从“发件箱”中“获取”所有信息,该功能将完成。唯一的潜在问题是,经销商可以取消隐藏此发件箱表,并在主表获取数据之前对其进行操作。我想不出一个解决办法,你能吗?顺便说一句,谢谢你的帮助。实际上我想做相反的事情,意思是让经销商的工作表启动触发器并更新主工作表。不过,我还是会试试你的建议。如何设置触发器运行的时间?抱歉,如果我问了一个非常基本的问题-我以前从未使用过可安装触发器。不用担心。在脚本文件中,单击资源>当前项目的触发器。将打开一个对话框,您可以在其中单击“添加新触发器”。应该在触发器表中添加一行,您可以在其中选择要“运行”的脚本和要触发脚本的“事件”。在“事件”列中选择“时间驱动”。然后选择计时器计划和执行脚本的频率。如果需要,您可以让经销商运行脚本,将其更新存储到他们有编辑权限的隐藏工作表中,从而使他们看起来像是在更新主数据库。该表可以像办公室的发件箱一样工作,秘书(您的定时脚本)可以访问需要移动表单的所有区域,但员工不一定需要访问。我提出了隐藏表作为发件箱的相同概念。因此,当经销商提交订单时,它就位于这个隐藏的表单中,直到主表单中的脚本运行并“获取”该订单。它工作得很好。一旦我在主控表中设置定时触发器,从“发件箱”中“获取”所有信息,该功能将完成。唯一的潜在问题是,经销商可以取消隐藏此发件箱表,并在主表获取数据之前对其进行操作。我想不出一个解决办法,你能吗?谢谢你的帮助