我有一张工作表,当onchange触发时,它会构成信息的镜像,以便稍后确定更改的行时用作参考。我已将此连接到查询功能。每当查询更新时,onChange函数就会运行。但是有时查询会表现得很奇怪,并且即使我在查询中看到信息,信息也会在复制到的工作表上显示为空白。而且,如果两台计算机同时查看查询,则很明显该查询并非在所有屏幕上都更新。所以我决定,为什么不这样做,而不是查询,我们以与更新镜像相同的方式来更新信息。因此,它将所有信息复制下来并放到工作表上,而无需查询。我认为这至少可以确保每个人都看到相同的信息。因此,我制作了一个查询表,并向其添加了一个onChange()触发器,该触发器可获取所有信息并将其粘贴到主表中,无论何时更新查询。 (即使它弄乱了,至少也更明显了,没有人看到任何不同的东西)。但是,当信息发布到主电子表格上时。电子表格的onChange函数没有触发。我认为只要有变化,它就会触发。无论。因此,我决定在查询表中创建一个新函数,在该表中插入和删除最后一行,甚至打个招呼,以为如果我对表进行更显着的更改,onChange()函数将触发。仍然没有。我很茫然。
function onChangeMirror() {
var sos = SpreadsheetApp.openById("the sheet with the query");
var sas = SpreadsheetApp.setActiveSpreadsheet(sos);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s1 = ss.getActiveSheet();
var lastRow = s1.getLastRow();
var lastRow1 = s1.getLastRow()+1;
var lastRow10 = s1.getLastRow() +10;
var SRange = s1.getRange(2,1,lastRow,2);
var A1Range = SRange.getA1Notation();
var SData = SRange.getValues();
var sos2 = SpreadsheetApp.openById("the sheet it's updating");
var sas2 = SpreadsheetApp.setActiveSpreadsheet(sos2);
var ss2 = SpreadsheetApp.getActiveSpreadsheet();
var s2 = ss2.getActiveSheet();
var MaxRow = s2.getMaxRows();
s2.getRange(A1Range).setValues(SData);
Logger.log(lastRow1)
Logger.log(lastRow10)
s2.getRange('A'+ lastRow1+':'+'B'+lastRow10).setValue(null);
Logger.log(A1Range)
if(MaxRow > '300') {
s2.deleteRow(MaxRow)
}
else if(MaxRow < '301'){
s2.insertRowAfter(MaxRow)
s2.getRange('A'+(MaxRow+1)).setValue('HI')
}
}
这是我正在使用的脚本