我对此很不好,但是在发布之前,我确实进行了很多搜索。我找到了一些答案,我现在停留在这一部分。
简而言之:我们有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();
}
预先感谢您的帮助。
答案 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();
}
}