Справочная информация:
Я пытаюсь разработать Google Sheet, где пользователь вводит некоторые параметры процесса, а затем запускает макрос, который:
1) Копирует данные в таблицу основных данных на другой вкладке / листе в файле Google Sheets.
2) Копирует данные на другую вкладку / лист в формате, чтобы подать некоторые графики для отслеживания последних данных.
3) Очищает ячейки ввода данных.
Примечание. Все вкладки / листы в файле защищены только мной (владельцем), который может редактировать, кроме ячеек, требующих ввода данных пользователем.
Что у меня так далеко:
Макрос работал для меня (владельца) безупречно, но другие пользователи получали сообщение об ошибке защиты. Я использовал функцию onEdit в качестве макроса, и она была бы вызвана введением 'GO' в целевую ячейку. Это вызвало бы пользовательскую функцию Transfer_Data ().
Я прочитал больше об установленных триггерах, обнаружил, что установленный триггер будет работать под моими разрешениями, и решил попробовать это. Однако установленный триггер был настроен для запуска onEdit, который, в свою очередь, запускает встроенную в лист функцию onEdit. Это означает, что функция onEdit активируется дважды, один раз как я (владелец) и один раз как пользователь, выполняющий редактирование. Инициированная пользователем функция onEdit в электронной таблице выдаст ошибку, но та, которая инициирована установленным триггером, должна выполнить код, как и предполагалось. Как мне разорвать порочный круг непрерывного вызова функции onEdit дважды, когда два разных пользователя редактируют каждую электронную таблицу?
function onEdit(e){
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('E16').setValue('BEBUG0');
var editedRange = e.range;
var editedRow = editedRange.getRow();
var editedColumn = editedRange.getColumn();
var editedCell = e.range.getA1Notation();
var editedValue = e.range.getValue();
if (editedCell == 'E15'){
spreadsheet.getRange('E16').setValue('BEBUG1');
if(editedValue == 'GO' || editedValue == 'Go' || editedValue == 'go' ||
editedValue == 'gO'){
spreadsheet.getRange('E16').setValue('BEBUG2');
Transfer_Data();
}
}
else{
spreadsheet.getRange('E16').setValue('YELLOW BOX NOT EDITED');
}
}
Примечание. Диапазон настройки 'E16' в приведенном выше коде работает только из-за проблем с отладкой. Я заметил, что он дважды вызывает функцию onEdit, выполняя редактирование листа и замечая, что ячейка E16 просматривает текст для отладочных проверок дважды каждый раз, когда выполняется одно редактирование.