Google表格脚本:将onEdit与openById(“ OtherSheetsId”)组合

时间:2019-08-21 23:50:03

标签: google-apps-script google-sheets

我对此很不好,但是在发布之前,我确实进行了很多搜索。我找到了一些答案,我现在停留在这一部分。

简而言之:我们有2个单独的Google文档表。当Spreadsheet1中的特定单元格发生更改时,脚本必须更改Spreadsheet2中特定单元格的值。

function onEdit(e) {
var mainsheet = SpreadsheetApp.getActive().getSheetByName('Main');
var changeit  = sheet.getRange("A1").getValue();
var offsheet = SpreadsheetApp.openById("spreadsheet2s id").getSheetByName('Echo').getRange("A1");

if (changeit == 'true'){

offsheet.setValue('true');
}

它基本上不起作用,在脚本中,当我转到“运行”->“执行记录”时,它告诉我执行失败:您无权调用SpreadsheetApp.openById。

当我在同一张纸上尝试这种方法时,效果很好。

似乎可以使用可安装的触发器来解决问题,但是我无法在此处找到确切的操作方法,例如如何应用可安装的触发器。

谷歌信息说,这将允许函数更改另一张纸上的信息。我们如何使它仅适用于上面列出的onEdit(e)函数?

最大的问题是,我们如何使这项工作/将其结合在一起?我所做的只是将其粘贴在下面(好像是它自己的功能一样)。 我已经以各种方式使用它(例如尝试在其中添加openByID信息并避免了其他一些愚蠢的事情),我想我在这里错过了一些简单的东西。

function createSpreadsheetEditTrigger() {
  var ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('onEdit')
      .forSpreadsheet(ss)
      .onEdit()
      .create();
}

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

尝试一下:

function ss1OnEdit(e){
  if(e.range.getSheet().getName()!='Main') return;
  SpreadsheetApp.openById("ss2id").getSheetByName("Echo").getRange(e.range.getA1Notation()).setValue(e.value);
}
//You can run this function all you want it will not create more than one trigger.  But you must run it once to setup the first trigger.
function createSS1OnEditTrigger() {
  var ss=SpreadsheetApp.getActive();
  var trgs=ScriptApp.getProjectTriggers();
  var found=false;
  for(var i=0;i<trgs.length;i++) {
    if(trgs[i].getHandlerFunction()=="ss1OnEdit") {
      return;
    }
  }
  if(!found) {
    ScriptApp.newTrigger("ss1OnEdit").forSpreadsheet(ss.getId()).onEdit().create();
  }
}