#google-apps-script #google-sheets
#google-apps-script #google-таблицы
Вопрос:
Я новичок в приложении Google sheets amp; script. Я использую Google таблицы для ведения бюджетов проектов в режиме реального времени. Я создал вкладку «История» для сбора исторической информации высокого уровня (код проекта, категория, общий утвержденный бюджет, прогнозируемая стоимость, отметка даты). Каждый раз, когда запускается scrip, он захватывает 4 строки данных.
function recordHistory() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName('ForMaster');
var sheet2 = ss.getSheetByName('History');
var data = sheet1.getRange('S84:W87').getValues();
var last_row = sheet2.getLastRow();
sheet2.getRange(last_row 1,1,4,5 ).setValues(data);
}
Я хотел бы настроить триггер, который запускается везде, где когда-либо происходит изменение любой из ячеек в диапазоне данных (S84: W87).
Я пробовал следующее, но, похоже, это не работает.
function setupTrigger() {
ScriptApp.newTrigger('recordHistory')
.forSpreadsheet('1TSX27lzmOpv6P8Z8zJJhYem_yLQwP-gYK4WYHJ3LEuA')
.onEdit()
.create();
}
function recordHistory(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName('ForMaster');
var sheet2 = ss.getSheetByName('History');
var data = sheet1.getRange('S84:W87').getValues();
var last_row = sheet2.getLastRow();
sheet2.getRange(last_row 1,1,4,5 ).setValues(data);
}
Ответ №1:
Объяснение:
Вам не нужен устанавливаемый триггер, поскольку вы не используете какие-либо службы, требующие разрешения.
- Вместо этого вы можете использовать простой
onEdit(e)
триггер.
Чтобы определить диапазон S84:W87
, в котором вы хотели бы принимать изменения, вы можете сделать это:
row>=84 amp;amp; row <= 87 amp;amp; col >=19 amp;amp; col <=23
84
является начальной строкой, 87
является конечной строкой, столбец 19
есть S
, а столбец 23
есть W
.
Также вы хотите принимать изменения только на листе ForMaster
.
Следовательно if
, утверждение будет выглядеть следующим образом:
if(as.getName()=="ForMaster" amp;amp; row>=84 amp;amp; row <= 87 amp;amp; col >=19 amp;amp; col <=23)
Решение:
function onEdit(e) {
const ss = e.source;
const as = ss.getActiveSheet();
const row = e.range.getRow();
const col = e.range.getColumn();
if(as.getName()=="ForMaster" amp;amp; row>=84 amp;amp; row <= 87 amp;amp; col >=19 amp;amp; col <=23){
const sheet2 = ss.getSheetByName('History');
const data = as.getRange('S84:W87').getValues();
const last_row = sheet2.getLastRow();
sheet2.getRange(last_row 1,1,data.length,data[0].length).setValues(data);
}
}
Обратите внимание на это!
onEdit
Триггеры срабатывают при редактировании пользователем. Эта функция не будет запускаться формулой или другим скриптом.- Опять же, это триггерная функция. Вы не должны выполнять его вручную, и вы действительно получите ошибки. Все, что вам нужно сделать, это сохранить этот фрагмент кода в редакторе скриптов, и тогда он будет автоматически запущен при редактировании.
Комментарии:
1. Это сработало как по волшебству! Спасибо , Мариос