У меня есть лист, который при запуске 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')
}
}
вот скрипт, который я использовал