Пишите ваши вопросы и замечания ниже! Постараюсь на все ответить. Если вам нравится видео, вы можете его поддержать лайком а так же, при желании, поддержать канал монетой 🎊 stm-solution.diaka.ua/donate 🥇Bitcoin - bc1q5ve3p8zmcm6z9tapts6padpmnvv572tsujukad 📲 Через кнопку "Спасибо" 👍 Или станьте спонсором канала!
Подскажите, как можно сделать список в несколько уровней? У вас в примере Apple > Iphone X А как можно добавить еще 1 уровень? Apple > Iphone X > 256gb или еще так: Apple > Iphone X > 256gb > Gold Если есть решение, напишите пожалуйста.
Отличное видео. Пересмотрев ролик несколько раз, получилось привязать к своей ситуации, если бы было менее подробно, может и не получилось бы. Просто здорово. Большое спасибо.
Супер, спасибо огромное! У меня получилось, из всех видео о данной теме, вы единственный который доходчиво обьясняете, и наиболее просто.!!! Подскажите пожалуйста что нужно изменить, чтобы оно начиналось не с о столбца А, а со столбца F? Спасибо большое ещё раз!
Привет! спасибо большое! очень полезно! Было бы полезно еще формирование сметы/заказа/Спецификации и т.п. где-то видела реализацию, когда в базе данных проставляли кол-во, а в соседнем листе формировалась из этих данных смета и ее далее отправляли ее клиенту также с помощью скрипта.
Отличный ролик! Но как заставить работать скрипт только в двух ячейках конкретного листа? Триггером onEdit почему то не получается, хотя в условии прописан конкретный лист. Он либо работает на всех листах, либо не работает вообще
Здавствуйте, можете подсказать пожалуйста как сделать так что бы скрипты работали одновременно, у меня стоит скрипт на обновление статусов ттн новой почты, каздые 3 часа, и когда это обновление происходит, то в таблице ничего нельзя сделать onEdit не срабатывает, пока не выполниться скрипт.
Добрый день - очень классные у вас ролики - сжато и по существу. Но остро не хватает комментариев к коду скрипта (устных, или закоменченых) - если нужный диапазон во вкладке "База", не в начале листа, а начинается например на D2, и дальше будет идти шапкой вправо, а списками вниз - как это задать? Подозреваю в этой строке: let values = sheetDb.getRange(1,1,1,sheetDb.getLastColumn()).getValues(); Наверное в скобке: строка начала массива, колонка начала массива, высота, и длинна - динамическая последняя колонка.
Я об этом подробно рассказывал в предыдущих уроках. Получение диапазона getRange(стартовая строка,стартовый столбец, количество строк, количество столбцов)
День добрый, спасибо за полезное видео. Родился такой вопрос, а если нужно выводить определенное число зависимых списков больше чем 1, есть ли способ это реализовать? Например выбираем: apple> список с айфонами (в 1 столбце), список с айфонами (во 2 столбце), список с айфонами (в 3 стобце) и т.д.
Здравствуйте. Можно вопрос не по теме видео? Скажите, пожалуйста, можно ли сделать так чтобы пользователи не работали с одной общей гугл таблицей одновременно, а для каждого создавался свой временный экземпляр? Просто суть моего проекта в том что пользователи вводят некоторые данные на листе и получают соответствующий результат и вмешательство одного пользователя в процесс ввода данных другим пользователем недопустимо. Или может быть можно ограничить число одновременно редактирующих конкретный лист пользователей до одного?
Если у кого выдает ошибку: -->> Exception: The parameters (String) don't match the method signature for SpreadsheetApp.Range.setDataValidation на строку ar.offset(0,1).setDataValidation(validation); Причина в отсутствии скобок: validation() строка должна выглядить так: ar.offset(0,1).setDataValidation(validation());
Добрый день, подскажите пожалуйста как, адаптировать ваш скрипт под строки. Вот мой вариант, проблема в том, что indexOf(valToFind) в моем случае не определяет индекс ячейки, пишет всегда одно и тоже число (в данном случае "1"), хотя в вашем варианте со столбцами все работает четко, я проверял. Заранее спасибо! function onEdit(){ let ss = SpreadsheetApp.getActiveSpreadsheet(); let sheet = ss.getSheetByName("Расчет сметы"); let sheetDb = ss.getSheetByName("Цены работа"); let ar = sheet.getActiveCell(); let valToFind = ar.getValue(); let values = sheetDb.getRange(1,1,sheetDb.getLastRow(),1).getValues(); let row = values[0].indexOf(valToFind)+1; console.log(row); let range = sheetDb.getRange(row,3,1,sheetDb.getLastColumn()).getValues(); console.log(range); let validation = SpreadsheetApp.newDataValidation().requireValueInList(range).build(); ar.offset(0,1).setDataValidation(validation); }
@@stmsolution ноль убирать пробовал не помогает, можно к вам обратится для доработки этого скрипта? самому знаний не хватает, а разбираться времени нет
@@stmsolution Приветствую. У меня похоже тот же вопрос. как доработать скрипт таким образом, чтобы в 6 строке вашего скрипта присваивать переменную 'ar' не активной ячейке, а целому диапазону например из 20 строк в первом столбце. например если данные из первого столбца не являются выпадающим списком, а возвращаются по другому условию. У меня получилось реализовать это условие только на первой строке листа "Общий", указав в 6 строке скрипта вместо getActiveCell() getRange(3,1)выбрав конкретную ячейку, но как применить это к остальным 20 строкам вниз - не понимаю. Куда копать?
@@НиколайСавчук-ъ7ш массивы, получайте столбец со значениями через getRange().getValues() и потом по этому массиву через цикл пробегайте вытаскивая каждый элемент массива отдельно
Скажите, пожалуйста, как в форме-гугл можно запретить редактировать её, если в одном из полей указана дата раньше сегодняшней? Необходимо запретить редактирование ответа на форму за прошедшее число. Можешь есть схожий метод в скриптах ss?
Благодарю за урок! Все работает кроме, когда добавляю if(ar.getColumn()!==1){return} Перестают создаваться ячейки со списком, если закомментирую эту строку, все работает. Помогите понять в чем причина. КОД: function onEdit(){ let ss = SpreadsheetApp.getActiveSpreadsheet(); let sheet = ss.getSheetByName("ДП"); let sheetDB = ss.getSheetByName("Настройки"); let ar = sheet.getActiveCell(); if(ar.getColumn()!==1){return} let valToFind = ar.getValue(); ar.offset(0, 1).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, 17, 1); console.log(range); let validation = SpreadsheetApp.newDataValidation().requireValueInRange(range).build(); //sheet.getRange(ar.getRow(), 2).setDataValidation(validation); ar.offset(0, 1).setDataValidation(validation); }
@@stmsolution Хочу понять как можно добавить еще уровни. У вас в примере Apple > Iphone X А как можно добавить еще 1 уровень? Apple > Iphone X > 256gb или еще так: Apple > Iphone X > 256gb > Gold Если есть решение, напишите пожалуйста.
Когда корректируешь значения в таблице, то постоянно появляется "Проверка данных". Самопроизвольно. И в любом месте. Можно заменить getActiveCell на какой-то другой метод?
Я вношу данные в следующую ячейку в ручную, после выбора значений в двух подряд выпадающих списках. Если что-то удаляю, то в соседней ячейке срабатывает скрипт.
Все прекрасно работало, но вдруг перестало, во втором выпадающем списке пишет загрузка, такое на всех компах в разных браузерах. На телефоне и планшете все работает. В чем может быть проблема?
Спасибо за нужную мне информацию. Но у меня в скрипте в строке let col = values(0).indexOf (valToFind); ошибка. Не могу разобраться и исправить. Если можно, помогите, пожалуйста.
Добрый день! Спасибо! Я новичок. Как убрать следующий момент: скрипт начинает срабатывать на второй вкладке, на которой мы записываем базу для выпадающих списков?
@@stmsolution Не умею пока писать такое условие. Поможете? function onEdit() { let ss = SpreadsheetApp.getActiveSpreadsheet(); let sheet = ss.getSheetByName("Учет"); let sheetDb= ss.getSheetByName("Г/ПГ");
let ar = sheet.getActiveCell(); if(ar.getColumn()!==2){return} let valToFind = ar.getValue(); ar.offset(0, 1).clearContent().clearDataValidations(); let values = sheetDb.getRange (5,1,1,sheetDb.getLastColumn()).getValues();
let col = values[0].indexOf(valToFind)+1; // console.log(col); let range = sheetDb.getRange(7, col, 20, 1); // console.log(range); let validation = SpreadsheetApp.newDataValidation().requireValueInRange(range).build();
th-cam.com/video/kFEmwZhn9w4/w-d-xo.html добрый день, посмотрите в этом видео, я рассказываю об этом, в правом нижнем углу квадратик зажимаем и тянем в низ
Отличный ролик! Но как заставить работать скрипт только в двух ячейках конкретного листа? Триггером onEdit почему то не получается, хотя в условии прописан конкретный лист. Он либо работает на всех листах, либо не работает вообще
Чтобы script работал только на определенном листе (например: лист с именем "sh1") необходимо весь код функции выполнять при условии что активный лист == sh1 Использовать условие: if ( активный лист==sh1) [ тело скрипта ] Нет под рукой компьютера допишу по возможности.
Пишите ваши вопросы и замечания ниже! Постараюсь на все ответить.
Если вам нравится видео, вы можете его поддержать лайком а так же, при желании, поддержать канал монетой
🎊 stm-solution.diaka.ua/donate
🥇Bitcoin - bc1q5ve3p8zmcm6z9tapts6padpmnvv572tsujukad
📲 Через кнопку "Спасибо"
👍 Или станьте спонсором канала!
Подскажите, как можно сделать список в несколько уровней?
У вас в примере Apple > Iphone X
А как можно добавить еще 1 уровень? Apple > Iphone X > 256gb
или еще так: Apple > Iphone X > 256gb > Gold
Если есть решение, напишите пожалуйста.
@@alexandermanzhula5155 тоже ищу, ничего не могу найти... Вы что либо нашли?
подскажите как данный скрипт можно переписать для работы не только для листа "Общий", но для каждого, заранее спасибо
Спасибо, спасибо огромное.
Рад ,что полезно
Дякую. Це те, що треба!
Отличное видео. Пересмотрев ролик несколько раз, получилось привязать к своей ситуации, если бы было менее подробно, может и не получилось бы. Просто здорово. Большое спасибо.
Стараемся))
@@stmsolution Інформація на каналі відповідала своєму часу. Але і зараз нічого подібного не існує - настільки все зрозуміло і доречно прокоментовано.
@@evhentkachenko689 может когда нибудь перезапущу тему с нуля, но пока что желания нет.
Супер, спасибо огромное! У меня получилось, из всех видео о данной теме, вы единственный который доходчиво обьясняете, и наиболее просто.!!!
Подскажите пожалуйста что нужно изменить, чтобы оно начиналось не с о столбца А, а со столбца F? Спасибо большое ещё раз!
Как всегда четко!!!! Спасибо огромное
Спасибо, очень понятно и подробно
Сделайте пожалуйста ещё видео про фильтры
Добрый , сделаем.
Очень полезно! Большое спасибо!
Круто! Все получилось. Спасибо за урок!
Пару часов назад писал аналогичный скрипт, но все равно вовремя ))) спасибо за информацию.
Спасибо что смотрите!))
урок бомба. спасибо!
Привет! спасибо большое! очень полезно!
Было бы полезно еще формирование сметы/заказа/Спецификации и т.п. где-то видела реализацию, когда в базе данных проставляли кол-во, а в соседнем листе формировалась из этих данных смета и ее далее отправляли ее клиенту также с помощью скрипта.
Я в основном даю людям базовые знания, дальше вы уже сами, что угодно можете сделать.
Отличный ролик! Но как заставить работать скрипт только в двух ячейках конкретного листа? Триггером onEdit почему то не получается, хотя в условии прописан конкретный лист. Он либо работает на всех листах, либо не работает вообще
Спасибо!
Полезная загогулина )))))))
Спасибо
Здавствуйте, можете подсказать пожалуйста как сделать так что бы скрипты работали одновременно, у меня стоит скрипт на обновление статусов ттн новой почты, каздые 3 часа, и когда это обновление происходит, то в таблице ничего нельзя сделать onEdit не срабатывает, пока не выполниться скрипт.
Фух....получилось...спасибо-)
Здравствуйте. Можно вопрос не по теме видео?
Скажите, пожалуйста, можно ли облегчить таблицу - чтобы работала быстрее с большими данными
Добрый день, th-cam.com/video/cu1EDhDJ0vY/w-d-xo.html
Добрый день - очень классные у вас ролики - сжато и по существу.
Но остро не хватает комментариев к коду скрипта (устных, или закоменченых) - если нужный диапазон во вкладке "База", не в начале листа, а начинается например на D2, и дальше будет идти шапкой вправо, а списками вниз - как это задать?
Подозреваю в этой строке:
let values = sheetDb.getRange(1,1,1,sheetDb.getLastColumn()).getValues();
Наверное в скобке: строка начала массива, колонка начала массива, высота, и длинна - динамическая последняя колонка.
Я об этом подробно рассказывал в предыдущих уроках. Получение диапазона getRange(стартовая строка,стартовый столбец, количество строк, количество столбцов)
дякую
День добрый, спасибо за полезное видео.
Родился такой вопрос, а если нужно выводить определенное число зависимых списков больше чем 1, есть ли способ это реализовать?
Например выбираем: apple> список с айфонами (в 1 столбце), список с айфонами (во 2 столбце), список с айфонами (в 3 стобце) и т.д.
Конечно, все на основании базы данных как построете
Здравствуйте. Можно вопрос не по теме видео?
Скажите, пожалуйста, можно ли сделать так чтобы пользователи не работали с одной общей гугл таблицей одновременно, а для каждого создавался свой временный экземпляр? Просто суть моего проекта в том что пользователи вводят некоторые данные на листе и получают соответствующий результат и вмешательство одного пользователя в процесс ввода данных другим пользователем недопустимо.
Или может быть можно ограничить число одновременно редактирующих конкретный лист пользователей до одного?
Сделайте листы для каждого пользователя отдельно и поставьте им доступ только для них, все
@@stmsolution проблема в том что пользователи - случайные люди, т.е. я не знаю их заранее
Спасибо. Я долго искал именно это видео. Доступно и емко. Единственное , во втором листе тоже выскакивают эти выдающие списки. HELP. Что делать?
Проверку на нужный лист пропишите, типо если активный лист, такой то, отделать, иначе return
@@stmsolution, спасибо, я попробую
Если у кого выдает ошибку:
-->> Exception: The parameters (String) don't match the method signature for SpreadsheetApp.Range.setDataValidation
на строку ar.offset(0,1).setDataValidation(validation);
Причина в отсутствии скобок: validation()
строка должна выглядить так: ar.offset(0,1).setDataValidation(validation());
Добрый день, подскажите пожалуйста как, адаптировать ваш скрипт под строки.
Вот мой вариант, проблема в том, что indexOf(valToFind) в моем случае не определяет индекс ячейки, пишет всегда одно и тоже число (в данном случае "1"), хотя в вашем варианте со столбцами все работает четко, я проверял. Заранее спасибо!
function onEdit(){
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getSheetByName("Расчет сметы");
let sheetDb = ss.getSheetByName("Цены работа");
let ar = sheet.getActiveCell();
let valToFind = ar.getValue();
let values = sheetDb.getRange(1,1,sheetDb.getLastRow(),1).getValues();
let row = values[0].indexOf(valToFind)+1;
console.log(row);
let range = sheetDb.getRange(row,3,1,sheetDb.getLastColumn()).getValues();
console.log(range);
let validation = SpreadsheetApp.newDataValidation().requireValueInList(range).build();
ar.offset(0,1).setDataValidation(validation);
}
У вас values это один столбец, по этому ничего вы не получите таким образом попробуйте ноль убрать
@@stmsolution ноль убирать пробовал не помогает, можно к вам обратится для доработки этого скрипта? самому знаний не хватает, а разбираться времени нет
Как сделать больше 2х зависимых списков? (Т.е. например при выборе Apple->iPhone X-> цена )
В следующих видео буду освещать, но сначала надо узнать что такое фильтр
Супер, спасибо. Буду ждать с нетерпением)
Все круто, но жаль что ofset применяется на других листах при редактировании, не могу решение найти(
If прописываете типо if (ss.getActiveSheet().getName()==="Лист1"){то выполняем весь код внутри}
@@stmsolution Спасибо!
@@stmsolution Подскажите пожалуйста, во у меня есть дата 10.12, как мне сделать так что бы когда было 12.10
запускался нужный код? делали подобное ?
Скажи пожалуйста, а ActiveCell можно заменить на фиксированный столбец в массиве?
Не совсем понял что хотите
@@stmsolution Приветствую. У меня похоже тот же вопрос. как доработать скрипт таким образом, чтобы в 6 строке вашего скрипта присваивать переменную 'ar' не активной ячейке, а целому диапазону например из 20 строк в первом столбце. например если данные из первого столбца не являются выпадающим списком, а возвращаются по другому условию. У меня получилось реализовать это условие только на первой строке листа "Общий", указав в 6 строке скрипта вместо getActiveCell() getRange(3,1)выбрав конкретную ячейку, но как применить это к остальным 20 строкам вниз - не понимаю. Куда копать?
@@НиколайСавчук-ъ7ш массивы, получайте столбец со значениями через getRange().getValues() и потом по этому массиву через цикл пробегайте вытаскивая каждый элемент массива отдельно
@@stmsolution , благодарю) Ответы я так понимаю в уроке про Циклы for и while) Верно?
@@НиколайСавчук-ъ7ш да и в уроках про массивы
ещё надо возврат сделать к исходному состоянию. Если удалили значение в столбце 1, то в столбце 2 пропадает зависимый выпадающий список.
Да, согласен, но видео и так большое получилось ,решил не добавлять много всего, при том что каждый может уже сам доработать под себя
@@stmsolution 2 строки кода, 15-20 секунд хронометража. В следующем добавьте.)
Не про ифы видео. Плюс объяснить что я делаю это доп минута, я стараюсь вкладываться в 5 минут , а тут как то и так занесло)))
@@stmsolution отличний формат получился
Скажите, пожалуйста, как в форме-гугл можно запретить редактировать её, если в одном из полей указана дата раньше сегодняшней? Необходимо запретить редактирование ответа на форму за прошедшее число. Можешь есть схожий метод в скриптах ss?
За такое не слышал, посмотрите в документации formapp
STM Solution А есть ли подобная функция в таблицах? Нужно запретить редактирование таблицы в зависимости от значения ячейки
Благодарю за урок! Все работает кроме, когда добавляю
if(ar.getColumn()!==1){return}
Перестают создаваться ячейки со списком, если закомментирую эту строку, все работает. Помогите понять в чем причина.
КОД:
function onEdit(){
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getSheetByName("ДП");
let sheetDB = ss.getSheetByName("Настройки");
let ar = sheet.getActiveCell();
if(ar.getColumn()!==1){return}
let valToFind = ar.getValue();
ar.offset(0, 1).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, 17, 1);
console.log(range);
let validation = SpreadsheetApp.newDataValidation().requireValueInRange(range).build();
//sheet.getRange(ar.getRow(), 2).setDataValidation(validation);
ar.offset(0, 1).setDataValidation(validation);
}
Надо смотреть ошибку, что выдает, плюс надо понимать что именно вы делаете.
@@stmsolution Хочу понять как можно добавить еще уровни.
У вас в примере Apple > Iphone X
А как можно добавить еще 1 уровень? Apple > Iphone X > 256gb
или еще так: Apple > Iphone X > 256gb > Gold
Если есть решение, напишите пожалуйста.
Когда корректируешь значения в таблице, то постоянно появляется "Проверка данных". Самопроизвольно. И в любом месте. Можно заменить getActiveCell на какой-то другой метод?
Пропишите условия типо что бы срабатывало только в конкретной ячейке
@@stmsolution А можешь направление указать, с чего именно начать)))? Буду благодарен.
Я вношу данные в следующую ячейку в ручную, после выбора значений в двух подряд выпадающих списках. Если что-то удаляю, то в соседней ячейке срабатывает скрипт.
@@stmsolution Первый вариант скрипта работает без этой проблемы. Только и автоматическую очистку ячейки пришлось тоже отменить.
Все прекрасно работало, но вдруг перестало, во втором выпадающем списке пишет загрузка, такое на всех компах в разных браузерах. На телефоне и планшете все работает. В чем может быть проблема?
удалите проверку данных и сделайте заново, гугл глючит
Спасибо за нужную мне информацию. Но у меня в скрипте в строке let col = values(0).indexOf (valToFind); ошибка. Не могу разобраться и исправить. Если можно, помогите, пожалуйста.
values[0]
Аналогично! indexOf(valToFind) не работает с getRange().getValues()! Как у автора всё получилось - не понятно...
@@АлександрЛамин-н1д квадратные скобки
спасибо!
Как сделать, чтобы скрипт работал с несколькими листами, куда подставляются данные по выпадающим спискам?
Пропишите их в скрипте
Добрый день! Спасибо! Я новичок. Как убрать следующий момент: скрипт начинает срабатывать на второй вкладке, на которой мы записываем базу для выпадающих списков?
Пропиши условие, что бы проверял нужный ли лист используется, а вообще код желательно посмотреть.
@@stmsolution Не умею пока писать такое условие. Поможете?
function onEdit() {
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getSheetByName("Учет");
let sheetDb= ss.getSheetByName("Г/ПГ");
let ar = sheet.getActiveCell();
if(ar.getColumn()!==2){return}
let valToFind = ar.getValue();
ar.offset(0, 1).clearContent().clearDataValidations();
let values = sheetDb.getRange (5,1,1,sheetDb.getLastColumn()).getValues();
let col = values[0].indexOf(valToFind)+1;
// console.log(col);
let range = sheetDb.getRange(7, col, 20, 1);
// console.log(range);
let validation = SpreadsheetApp.newDataValidation().requireValueInRange(range).build();
ar.offset(0, 1).setDataValidation(validation);
}
@@stmsolution помоги плиз
Как сделать, что бы искомое значение было не в первом столбце, пятый час мучаюсь !
пропишите поиск в нужном столбце.
Вопрос по ходу. на 8:47 (сразу растяну...) и появились в нижних ячейках списки. Как это произошло?
th-cam.com/video/kFEmwZhn9w4/w-d-xo.html добрый день, посмотрите в этом видео, я рассказываю об этом, в правом нижнем углу квадратик зажимаем и тянем в низ
@@stmsolution Спасибо
Видео интересное, а нельзя ли сделать отдельное видео "Как задать текстовому ответу цифровое значение в Таблице Гугл Форм"?
Не совсем понятен вопрос.
До этого объявляли с помощью var, теперь let
Поменялся стандарт объявления переменных , var устарело.
Спасибо!
Отличный ролик! Но как заставить работать скрипт только в двух ячейках конкретного листа? Триггером onEdit почему то не получается, хотя в условии прописан конкретный лист. Он либо работает на всех листах, либо не работает вообще
Чтобы script работал только на определенном листе (например: лист с именем "sh1") необходимо весь код функции выполнять при условии что активный лист == sh1
Использовать условие:
if ( активный лист==sh1) [
тело скрипта
]
Нет под рукой компьютера допишу по возможности.
@@you-tube36 Спасибо!
@@you-tube36 Подскажи, какой код прописать