Является ли это возможным? OnChange из одной электронной таблицы вызывает OnChange из другой электронной таблицы - PullRequest
0 голосов
/ 22 мая 2019

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

вот скрипт, который я использовал

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...