Задать вопрос
@Smouke

Как ограничить диапазон скрипта на один лист Google Sheets?

Здравствуйте, есть таблица в Google Sheets, сделали скрипт на два действия:
1) Автоматическая простановка даты, при появлении записи в ячейке
2) При появлении в ячейке определенной записи товара, в соседней ячейке скрипт добавляет выпадающий список с выбором модели товара
Все это должно происходить только в одном листе, не затрагивая другие

Проблема:
Скрипт даты работает нормально на этом листе, а вот скрипт выпадающего списка действует на все листы в нашей таблице. В чем ошибка?
В примере уже есть попытки ограничить листы, но не помогает, выдает ошибку, поэтому пока оставили, как комментарий.
(При активировании второй строки попыток ограничить листы, выдает ошибку в 18 строке)
Помогите пожалуйста

Ссылка на пример таблицы, в листе статистика второй скрипт тоже работает, но не должен: https://docs.google.com/spreadsheets/d/1zHuFzuxfCr...

Скрипт:
function onEdit(e) {
  {
  var str = e.range.getRow();
  var stolb = e.range.getColumn();
  
  if (stolb == 4 && e.source.getActiveSheet().getName() == "Заказы"){
     e.source.getActiveSheet().getRange(str,2).setValue(new Date());
     }
  
  

{
//Попытка ограничить листы  
//if (ss.getActiveSheet().getName()==="Заказы")
//if (e.source.getActiveSheet().getName()==="Заказы")

let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getSheetByName("Заказы");
let sheetDb = ss.getSheetByName("Диапазон");

let ar = sheet.getActiveCell();
if(ar.getColumn()!==6){return}
let valToFind = ar.getValue();
//Удаление записи при изменении товара
//ar.offset(0, 2).clearContent().clearDataValidations();
let values = sheetDb.getRange(1,1,1,sheetDb.getLastColumn()).getValues();

let col = values[0].indexOf(valToFind)+1;
console.log(col);
let range = sheetDb.getRange(3, col, 30, 1);
console.log(range);
let validation = SpreadsheetApp.newDataValidation().requireValueInRange(range).build();

//shet.getRange(ar.getRow(), 8).setDataValidation(validation)
ar.offset(0, 2).setDataValidation(validation);

}

}
}
  • Вопрос задан
  • 135 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
@Kazzzak
Замените e.source.getActiveSheet().getName() на e.source.getSheetName()
Во второй части скрипта проверяйте if(e.source.getSheetName()== "что-то там" && e.range.getColumn() == 6)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы