Понадобилось тут сделать зависимый выпадающий список. Не нашел ничего лучше, как видеоурок написания скрипта на AppScript.
Задача скрипта: - в 6-й колонке находится выпадающий список, и при выборе определенного значения из этого списка в 8й и 9й колонке выпадают зависимые от 6й колонки списки… Скрипт работает. С этим всё ок.
Однако есть проблема: скрипт работает НА ВСЕХ листах вместо определённого… Хотя в скрипте точно указал лист на котором он должен работать…
Может кто в курсе, что в этом скрипте не так? Почему он работает сразу на всех листах?
Код
function onEdit(){
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getSheetByName("ЗАЯВКИ");
let sheetDb = ss.getSheetByName("SYS_LIST_CATEGORY");
let ar = sheet.getActiveCell();
if(ar.getColumn()!==6){return}
let valToFind = ar.getValue();
ar.offset(0, 3).clearContent().clearDataValidations();
ar.offset(0, 2).clearContent().clearDataValidations();
let values = sheetDb.getRange(9,1,1,sheetDb.getLastColumn()).getValues();
let col = values[0].indexOf(valToFind)+1;
console.log(col);
let range = sheetDb.getRange(10, col, 3,1).getValues();
//для установки неопределенного диапазона
//let range = sheetDb.getRange(10, col, 3,1);
console.log(range);
let validation = SpreadsheetApp.newDataValidation().requireValueInList(range).build();
//для установки неопределенного диапазона
//let validation = SpreadsheetApp.newDataValidation().requireValueInRange(range).build();
//sheet.getRange(ar.getRow(), 2).setDataValidation(validation);
ar.offset(0, 2).setDataValidation(validation);
ar.offset(0, 3).setDataValidation(validation);
}
PS да, времени не было создавать ещё один GoogleSheets с примером, чтобы его можно было увидеть по ссылке.
Всем привет. ...задача была в Гугл таблицах (Google Sheets) в автоматическом режиме вставлять сегодняшнюю дату(дату редактирования) в определённую ячейку при редактировании определенной ячейки. В поисках сего наткнулся на такой код:
Код
function auto_set_date(){
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getSheetByName('ЗАЯВКИ');
let ar = sheet.getActiveRange();
let a_col = ar.getColumn();
// let a_row = ar.getRow();
if(a_col === 2 && ar.offset(0,6).getValue()===''){
ar.offset(0,6).setValue(new Date());
}
}
Код работает....но абсолютно на всех листах... а надо только на одном.
В поисках решения проблемы наткнулся на такой код:
Код
if (sheet.getName()==="Нужный лист"){весь код}
пояснение куда вставить этот кусок кода отсутствовало и я так понял, что надо вставить этот кусок кода строкой №1 и в скобках "весь код" вписать весь код начиная со строки "function auto_set_date(){". То есть вот так:
Код
if (sheet.getName()==='ЗАЯВКИ'){
function auto_set_date(){
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getSheetByName('ЗАЯВКИ');
let ar = sheet.getActiveRange();
let a_col = ar.getColumn();
// let a_row = ar.getRow();
if(a_col === 2 && ar.offset(0,6).getValue()===''){
ar.offset(0,6).setValue(new Date());
}
}
}
Ну я так и сделал... и при таком раскладе код полностью перестал работать.
Кто знает как решить эту проблему - как заставить этот код работать только на определённом листе?
и еще раз всем добрый вечер. ...может кто сможет помочь.
В Книге Эксель (во вложении) я тут на скорую руку, не будучи знатоком программирования в эксель, создал таблицу для соревнований по плаванию. Забегая в перед скажу, это не то на что я рассчитывал, но хоть что-то...
Идея изначально была хорошая: - в лист ЗАЯВКИ вбиваем данные заявленных участников, категорию, ФИО тренера, стиль заплыва и примерное время лучшего заплыва на тренировках. - в листе ЗАПЛЫВЫ - формируем заплывы: выбираем дорожку и ИМЯ участника из выпадающего списка, а параметры: категория, ФИО тренера и стиль - должны подтягиваться автоматически из листа ЗАЯВКИ. После заплыва в строку ВРЕМЯ заносится время. - в листе НАГРАЖДЕНИЕ - формируем списки награждения: Выбираем из выпадающего списка только имя участника, а все остальные данные в том числе и время заплыва подтягиваются из листа ЗАПЛЫВЫ. Также при этом автоматом формируется место участника в зависимости от времени, которое подтягивается из листа ЗАПЛЫВЫ.
Это конечно всё работает, но я также столкнулся с некоторыми проблемами (или ограничениями моего Экселя), которые пришлось решать очень "по колхозному".
В кратце о проблемах моего колхоза: - в Листе НАГРАЖДЕНИЕ пришлось извращаться с функцией РАНГ: =ЕСЛИОШИБКА(РАНГ(H60;H$60:H$68;1)+СЧЁТЕСЛИ(H$60:H60;H60)-1;"-") так как сортировка занятых мест шла не по порядку и в дополнение, функция РАНГ не решает проблему: что делать если несколько участников плывут одинаковое время (до долей секунды) и на награждении им надо присвоить одинаковые места.
- во вторых хотелось бы какой-то автоматизации: чтобы была чудо-кнопка по нажатию которой, в листе ЗАПЛЫВЫ автоматически формировалась таблица заплывов с дорожками. Такое вообще Возможно? Вроде бы про эту чудо-кнопку писали вот тут на форуме, но у меня этот пример не работает даже с включёнными макросами: https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=98989&am...
- как сделать так, чтобы при добавлении участника в общий список в листе ЗАВКИ, он автоматически добавлялся во всех выпадающих списках, где выбираем участника... пока это реализую в ручном порядке заходя во вкладку данные>>проверка данных>> и в графе Источник рисуем новый диапазон из таблицы с участниками
Может кто-то из знатоков глянет файл? Хочется привести в порядок мой колхоз...
Добрый вечер. ...уже не помню какую неделю мучаюсь(бьюсь головой об стену) с функцией РАНГ. Гугл и Яндекс оказались бесполезны в поисках конкретно моей проблемы. Может кто знает, есть ли альтернатива функции РАНГ, чтобы избавится от функции РАНГ как от ночного кошмара раз и навсегда.
Задача: ранжировать время заплыва по маске времени "00:00,00" Ну как бы РАНГ с этим справляется, однако для меня есть два больших минуса этой функции:
- если в списке времени есть время 00:00,00 (нулевое время), то РАНГ присваивает 1-е место пловцу проплывшему за 00:00,00... это дико смешно. И как отучить РАНГ от этой привычки - не понятно.
- и второй главный минус (не знаю, может это у меня глючит эксель):
ВРЕМЯ МЕСТО 00:34,06 4 - - 00:23,01 1 - - - - 00:28,07 2 00:43,07 5 01:04,01 6 00:28,07 2
после 2-го места идёт 4-е. Как такое может быть? Да, в этом примере два вторых места. Логично предположить, что после второго места(хоть сколько бы их ни было) идёт третье - а тут - четвертое. Как так? И вместо нулевого времени пришлось выставить прочерк.
Формула РАНГ вот такая: =ЕСЛИОШИБКА(РАНГ(K6;K6:K14;1);"-") (пришлось извращаться добавив ЕСЛИОШИБКА, чтобы РАНГ смог работать хотяб с прочерком вместо нулевого времени)
Можно с этим что-то сделать и заодно отучить РАНГ присваивать 1-е место за время 00:00,00 ?