我试图使用onEdit触发器时,工作表中的特定选项卡被编辑,并将其复制到另一个工作表中的特定选项卡。例如:如果在第1页Test 1标签中有任何变化,那么它将复制在第1页Test 1标签中的任何内容到第2页Test 1。但是,如果更改是在sheet1 Test 2选项卡中,则它会将sheet1 Test 2选项卡中的任何内容复制到sheet2 tab 2选项卡中。
我只能手动复制和粘贴(我可以成功地将表1 Test 1选项卡复制到表2 Test 1选项卡或表1 Test 2选项卡复制到表2 Test 2选项卡),但是当我在代码上添加onEdit触发器和if循环(用于指定编辑发生的位置以及源和目标选项卡的位置)时,代码不会运行。
下面是我的两个代码(第一个将是if else循环指定源和目的地,第二个将是onEdit触发器):
代码1
function test1()
{var sheet = SpreadsheetApp.getActiveSheet().getSheetName()
if(sheet == 'Test 1') {
//your script
var sss = SpreadsheetApp.openById('1xk1ayrBYXCDdHcIwi7Hukq1xnNjqSTsQ7CHQbzfFiRM'); //replace with source ID
var ss = sss.getSheetByName('Test 1');
var sr = ss.getRange("A1:N25");
var data = sr.getValues();
var tss = SpreadsheetApp.openById('1Ut-eyO3FMBApQd62ewtINmIQSQJSDL7DCU5bRIzdBVY'); //replace with destination ID
var ts = tss.getSheetByName('Test 1');
var tr = ts.getRange("A1:N25");
tr.setValues(data);
}
else if(sheet == 'Test 2') {
//your script
var sss = SpreadsheetApp.openById('1xk1ayrBYXCDdHcIwi7Hukq1xnNjqSTsQ7CHQbzfFiRM'); //replace with source ID
var ss = sss.getSheetByName('Test 2');
var sr = ss.getRange("A1:N25");
var data = sr.getValues();
var tss = SpreadsheetApp.openById('1Ut-eyO3FMBApQd62ewtINmIQSQJSDL7DCU5bRIzdBVY'); //replace with destination ID
var ts = tss.getSheetByName('Test 2');
var tr = ts.getRange("A1:N25");
tr.setValues(data);
}
}
代码2
function createEditTrigger() {
ScriptApp.newTrigger("test 1")
.forSpreadsheet(SpreadsheetApp.getActive())
.onEdit()
.create();
}
这是我的样品单:
样品表1:https://docs.google.com/spreadsheets/d/1xk1ayrBYXCDdHcIwi7Hukq1xnNjqSTsQ7CHQbzfFiRM/edit#gid=0
样品表2:https://docs.google.com/spreadsheets/d/1Ut-eyO3FMBApQd62ewtINmIQSQJSDL7DCU5bRIzdBVY/edit gid = 921178690
如果我只需要将表1中的更改复制到表2中,那么最好的方法是什么?我不需要监视表2中是否发生了任何变化,也不需要将表2中的任何内容复制到表1中。
SpreadsheetApp.openById()需要授权,onEdit()不能执行需要权限的操作。必须使用可安装的触发器。