Здравствуйте всем. У меня есть задача: мне нужно настроить триггер, который будет автоматически срабатывать при изменении ячейки "A1" на "Sheet1". Этот триггер должен запускать макрос, добавляющий строку сверху. Цель этого изменения — чтобы при заполнении реестра счетов новые счета добавлялись сверху, а старые опускались вниз, чтобы улучшить порядок. Это очень важно для меня, и я надеюсь на вашу помощь. <br/> Вот код моего макроса для добавления строки сверху: <br/> <br/> function macro_1() { <br/> var spreadsheet = SpreadsheetApp.getActive(); <br/> spreadsheet.getRange('2:2').activate(); <br/> spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1); <br/> spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate(); <br/> };
Для создания триггера, который будет запускать макрос при изменении конкретной ячейки ("A1") на определенном листе ("Sheet1"), вам нужно сделать следующее:
1. Вам нужно заменить ваш текущий макрос на функцию, которая будет работать в связке с триггерами.
2. Создать функцию, которая будет проверять, изменилось ли значение в ячейке "A1" на листе "Sheet1".
3. Использовать триггер "onEdit", который срабатывает каждый раз при редактировании таблицы.
Вот пример кода, который выполняет эту задачу:
```javascript
function onEdit(e) {
// Получаем информацию о событии редактирования
var range = e.range;
var sheet = range.getSheet();
// Проверяем, изменена ли ячейка "A1" на листе "Sheet1"
if (sheet.getName() === "Sheet1" && range.getA1Notation() === "A1") {
addRowAbove(); // Вызываем функцию для добавления строки
}
}
function addRowAbove() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getActiveSheet();
// Добавляем строку перед второй строкой
sheet.insertRowBefore(2);
}
```
### Пошаговое руководство
1. Откройте Google Sheets и перейдите в `Расширения` -> `Apps Script`.
2. Удалите весь существующий код в редакторе и вставьте приведенный выше код.
3. Нажмите на значок диска, чтобы сохранить проект.
4. Теперь, если вы измените значение в ячейке "A1" на листе "Sheet1", будет вызвана функция `addRowAbove`, которая добавит новую строку перед второй строкой.
### Заметки:
- Не забудьте проверить, что ваш триггер работает. Вы можете изменить ячейку "A1", чтобы убедиться, что строка добавляется.
- Этот триггер будет работать только для редактирования вручную; если вы программно изменяете значение ячейки "A1", триггер "onEdit" не сработает.
Только я раз 10 этот код скидывал здесь.
/** * Возникает при изменении ячейки * @param {e} event event-объект https://developers.google.com/apps-script/guides/triggers/events?hl=ru * [ ProgrammerForever (c) 2020 ] * @return Не возвращает значений */ function onEdit(event) { var sheet = event.source.getActiveSheet();//Текущий лист var address = event.range.getA1Notation().toUpperCase();//Адрес ячейки var row = event.range.getRow(); //Номер строки var col = event.range.getColumn(); //Номер столбца var newValue = event.value; //Новое значение var oldValue = event.oldValue; //Старое значение var userEmail = event.user.getEmail();//Пользователь(работает только при вручную назначенном триггере) if((col===1)&&(row===1)&&(sheet.getName==="Sheet1")){ // Что-то делаем }; };