Как мне управлять расположением выходной ячейки в листе Google с помощью скрипта Google?
Я работаю над сценарием для листа Google и изучаю сценарии с нуля.
Я использовал следующий скрипт и с успехом изменил входной столбец, но выходные данные остались в столбце A. Я хочу, чтобы выходные данные переместились в столбец T, и строка должна остаться прежней.
Тип триггера хороший, но он работает на всех листах, поэтому мне нужно ограничить количество листов, на которых он работает. Как заставить скрипт работать в одной конкретной комбинации листов и вкладок?
Пока я спрашиваю об изменении вывода на один столбец, можете ли вы объяснить общий метод определения выходного столбца и строки?
Заранее спасибо.
Код, вот точный сценарий, который я использую. После запуска сценария в редакторе в строке 3 выдается сообщение об ошибке: "var eventRange=event.range;"
это останавливается, если я удаляю квотирования вокруг имени листа "тикет для доставки" в строке 6. но я получаю новую ошибку, когда запускаю скрипт в строке 6 "который отсутствует" после условия, строка 6". Вот код, с которым я работаю и который был написан другим постером здесь.
function onEdit(event) {
var eventRange = event.range;
var sheetName = eventRange.getSheet().getName();
if (eventRange.getColumn() == 14 && sheetName == 'tickets to deliver') {
//if (eventRange.getColumn() == 14 && sheetName.match(/sheetName1|sheetName2/)) {
// getRange(row, column, numRows, numColumns)
var columnXRange = SpreadsheetApp.getActiveSheet().getRange(eventRange.getRow(), 21, eventRange.getNumRows(), 1);
//second parameter changed from '1' to '21'. 21 represents column 'U'
var values = columnXRange.getValues();
for (var i = 0; i < values.length; i++) {
if (!values[i][0]) {
values[i][0] = new Date();
}
}
columnXRange.setValues(values);
}
}
2 ответа
Вы можете управлять листами, на которые воздействует скрипт, проверив имя листа. Есть два варианта ниже.
- Первый - это точное совпадение имени листа со строкой.
- Второй (закомментированный) - сопоставить имя листа с регулярным выражением.
Регулировка колонки от А до Т прокомментирована ниже.
function onEdit(event) {
var eventRange = event.range;
var sheetName = eventRange.getSheet().getName();
if (eventRange.getColumn() == 14 && sheetName == 'yourSheetNameHere') {
//if (eventRange.getColumn() == 14 && sheetName.match(/sheetName1|sheetName2/)) {
// getRange(row, column, numRows, numColumns)
var columnXRange = SpreadsheetApp.getActiveSheet().getRange(eventRange.getRow(), 20, eventRange.getNumRows(), 1);
//second parameter changed from '1' to '20'. 20 represents column 'T'
var values = columnXRange.getValues();
for (var i = 0; i < values.length; i++) {
if (!values[i][0]) {
values[i][0] = new Date();
}
}
columnXRange.setValues(values);
}
}
РЕДАКТИРОВАТЬ
После нашего разговора я запрыгнул на компьютер, чтобы проверить сценарий.
Вот мой рабочий сценарий. (Просто удалил комментарии) Не должно быть никаких изменений в реальном сценарии.
Также обратите внимание, что вы не можете просто использовать функцию отладки как есть при тестировании функции onEdit или onChange, для которой требуется объект события. Если вы собираетесь использовать отладку, в этой функции вам нужно изменить строку 3 на var eventRange = SpreadsheetApp.getActive.getActiveRange();
,
Обратите внимание, что тестовая строка имени листа должна быть точной и чувствительной к регистру.
function onEdit(event) {
var eventRange = event.range;
var sheetName = eventRange.getSheet().getName();
if (eventRange.getColumn() == 14 && sheetName == 'tickets to deliver') {
var columnXRange = SpreadsheetApp.getActiveSheet().getRange(eventRange.getRow(), 21, eventRange.getNumRows(), 1);
var values = columnXRange.getValues();
for (var i = 0; i < values.length; i++) {
if (!values[i][0]) {
values[i][0] = new Date();
}
}
columnXRange.setValues(values);
}
}
Я хочу, чтобы вывод шел в столбец T, и строка должна оставаться неизменной.
+ Изменить , 1,
в , 20,
,