Google Apps Script.Зависимые выпадающие списки! Dependent drop down lists! Google Sheets Урок 10.

Поділитися
Вставка
  • Опубліковано 5 вер 2024
  • В этом уроке я расскажу о том как сделать зависимые выпадающие списки в гугл таблице, с помощью Google Apps Script. Так же мы косвенно коснемся массивов и как по ним производить поиск значений и научимся делать смещение на нужные нам количества строк и столбцов.
    Смотрите до конца, будет интересно.
    Поддержи автора канала пальцем в верх и подпиской это для
    меня лучший стимул продолжать развиваться.
    Станьте спонсором канала, и вы получите доступ к эксклюзивным бонусам. Подробнее:
    / @stmsolution
    💰 Поддержать монетой:
    🎊 stm-solution.d...
    🥇Bitcoin - bc1q5ve3p8zmcm6z9tapts6padpmnvv572tsujukad
    📲 Через кнопку "Спасибо"
    👍 Или станьте спонсором канала!
    #STMSolution #Googlesheets #Googlescript
    Подробно о проверке данных - developers.goo...
    Все уроки по Гугл таблицам в одном плейлисте - • Google таблицы. Как со...
    Помощь по гугл таблицам - пишите в ВК id8947072
    Попробуй себя в фрилансе - kwork.ru/?ref=...
    Или закажи разработку - kwork.ru/user/...
    Мой паблик в Telegram - t.me/stmsolution
    Буду рад видеть вас в моей группе ВК - public1...
    Twitter - / stm_solution
    Мой сайт stmsolution.ru
    Еще больше видео на моем канале / @stmsolution

КОМЕНТАРІ • 116

  • @stmsolution
    @stmsolution  4 роки тому +3

    Пишите ваши вопросы и замечания ниже! Постараюсь на все ответить.
    Если вам нравится видео, вы можете его поддержать лайком а так же, при желании, поддержать канал монетой
    🎊 stm-solution.diaka.ua/donate
    🥇Bitcoin - bc1q5ve3p8zmcm6z9tapts6padpmnvv572tsujukad
    📲 Через кнопку "Спасибо"
    👍 Или станьте спонсором канала!

    • @alexandermanzhula5155
      @alexandermanzhula5155 3 роки тому +1

      Подскажите, как можно сделать список в несколько уровней?
      У вас в примере Apple > Iphone X
      А как можно добавить еще 1 уровень? Apple > Iphone X > 256gb
      или еще так: Apple > Iphone X > 256gb > Gold
      Если есть решение, напишите пожалуйста.

    • @FuadKerimov
      @FuadKerimov 3 роки тому

      @@alexandermanzhula5155 тоже ищу, ничего не могу найти... Вы что либо нашли?

    • @everyone-nobody777
      @everyone-nobody777 Рік тому

      подскажите как данный скрипт можно переписать для работы не только для листа "Общий", но для каждого, заранее спасибо

  • @user-zg3og8ep4h
    @user-zg3og8ep4h 4 роки тому +7

    Спасибо, спасибо огромное.

    • @stmsolution
      @stmsolution  4 роки тому +2

      Рад ,что полезно

  • @tarasmops5545
    @tarasmops5545 4 роки тому +2

    Дякую. Це те, що треба!

  • @angelicabrailova8959
    @angelicabrailova8959 2 роки тому +1

    Отличное видео. Пересмотрев ролик несколько раз, получилось привязать к своей ситуации, если бы было менее подробно, может и не получилось бы. Просто здорово. Большое спасибо.

    • @stmsolution
      @stmsolution  2 роки тому

      Стараемся))

    • @evhentkachenko689
      @evhentkachenko689 20 днів тому

      @@stmsolution Інформація на каналі відповідала своєму часу. Але і зараз нічого подібного не існує - настільки все зрозуміло і доречно прокоментовано.

    • @stmsolution
      @stmsolution  20 днів тому

      @@evhentkachenko689 может когда нибудь перезапущу тему с нуля, но пока что желания нет.

  • @pechennkoo
    @pechennkoo 4 роки тому +2

    Спасибо, очень понятно и подробно
    Сделайте пожалуйста ещё видео про фильтры

    • @stmsolution
      @stmsolution  4 роки тому +2

      Добрый , сделаем.

  • @told12345
    @told12345 4 роки тому +2

    Пару часов назад писал аналогичный скрипт, но все равно вовремя ))) спасибо за информацию.

    • @stmsolution
      @stmsolution  4 роки тому

      Спасибо что смотрите!))

  • @Sannya3000
    @Sannya3000 Рік тому

    Супер, спасибо огромное! У меня получилось, из всех видео о данной теме, вы единственный который доходчиво обьясняете, и наиболее просто.!!!
    Подскажите пожалуйста что нужно изменить, чтобы оно начиналось не с о столбца А, а со столбца F? Спасибо большое ещё раз!

  • @SemenYashin
    @SemenYashin 4 роки тому +1

    Как всегда четко!!!! Спасибо огромное

  • @oleksandr6831
    @oleksandr6831 3 роки тому

    Круто! Все получилось. Спасибо за урок!

  • @Rokinso
    @Rokinso 4 роки тому +1

    Очень полезно! Большое спасибо!

  • @user-cv9uf5gk4o
    @user-cv9uf5gk4o 2 роки тому

    Привет! спасибо большое! очень полезно!
    Было бы полезно еще формирование сметы/заказа/Спецификации и т.п. где-то видела реализацию, когда в базе данных проставляли кол-во, а в соседнем листе формировалась из этих данных смета и ее далее отправляли ее клиенту также с помощью скрипта.

    • @stmsolution
      @stmsolution  2 роки тому +1

      Я в основном даю людям базовые знания, дальше вы уже сами, что угодно можете сделать.

  • @user-yc8vl3fb2p
    @user-yc8vl3fb2p 4 роки тому +1

    Полезная загогулина )))))))

  • @user-vb9tg3sg8s
    @user-vb9tg3sg8s 3 роки тому +1

    Отличный ролик! Но как заставить работать скрипт только в двух ячейках конкретного листа? Триггером onEdit почему то не получается, хотя в условии прописан конкретный лист. Он либо работает на всех листах, либо не работает вообще

  • @b2brus
    @b2brus 3 роки тому

    урок бомба. спасибо!

  • @worldtech2770
    @worldtech2770 2 роки тому +1

    Здавствуйте, можете подсказать пожалуйста как сделать так что бы скрипты работали одновременно, у меня стоит скрипт на обновление статусов ттн новой почты, каздые 3 часа, и когда это обновление происходит, то в таблице ничего нельзя сделать onEdit не срабатывает, пока не выполниться скрипт.

  • @rework_minsk
    @rework_minsk 4 роки тому +2

    Как сделать больше 2х зависимых списков? (Т.е. например при выборе Apple->iPhone X-> цена )

    • @stmsolution
      @stmsolution  4 роки тому +2

      В следующих видео буду освещать, но сначала надо узнать что такое фильтр

    • @rework_minsk
      @rework_minsk 4 роки тому

      Супер, спасибо. Буду ждать с нетерпением)

  • @1979agrant
    @1979agrant 4 роки тому +2

    ещё надо возврат сделать к исходному состоянию. Если удалили значение в столбце 1, то в столбце 2 пропадает зависимый выпадающий список.

    • @stmsolution
      @stmsolution  4 роки тому +1

      Да, согласен, но видео и так большое получилось ,решил не добавлять много всего, при том что каждый может уже сам доработать под себя

    • @1979agrant
      @1979agrant 4 роки тому +1

      @@stmsolution 2 строки кода, 15-20 секунд хронометража. В следующем добавьте.)

    • @stmsolution
      @stmsolution  4 роки тому +1

      Не про ифы видео. Плюс объяснить что я делаю это доп минута, я стараюсь вкладываться в 5 минут , а тут как то и так занесло)))

    • @layymer
      @layymer 4 роки тому

      @@stmsolution отличний формат получился

  • @you-tube36
    @you-tube36 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());

  • @1raskumar
    @1raskumar Рік тому

    Спасибо!

  • @air7380
    @air7380 4 роки тому +1

    Здравствуйте. Можно вопрос не по теме видео?
    Скажите, пожалуйста, можно ли облегчить таблицу - чтобы работала быстрее с большими данными

    • @stmsolution
      @stmsolution  4 роки тому +1

      Добрый день, ua-cam.com/video/cu1EDhDJ0vY/v-deo.html

  • @rayximers2688
    @rayximers2688 2 роки тому

    Спасибо. Я долго искал именно это видео. Доступно и емко. Единственное , во втором листе тоже выскакивают эти выдающие списки. HELP. Что делать?

    • @stmsolution
      @stmsolution  2 роки тому

      Проверку на нужный лист пропишите, типо если активный лист, такой то, отделать, иначе return

    • @rayximers2688
      @rayximers2688 2 роки тому

      @@stmsolution, спасибо, я попробую

  • @slavak2v
    @slavak2v 4 роки тому

    Добрый день - очень классные у вас ролики - сжато и по существу.
    Но остро не хватает комментариев к коду скрипта (устных, или закоменченых) - если нужный диапазон во вкладке "База", не в начале листа, а начинается например на D2, и дальше будет идти шапкой вправо, а списками вниз - как это задать?
    Подозреваю в этой строке:
    let values = sheetDb.getRange(1,1,1,sheetDb.getLastColumn()).getValues();
    Наверное в скобке: строка начала массива, колонка начала массива, высота, и длинна - динамическая последняя колонка.

    • @stmsolution
      @stmsolution  4 роки тому

      Я об этом подробно рассказывал в предыдущих уроках. Получение диапазона getRange(стартовая строка,стартовый столбец, количество строк, количество столбцов)

  • @DmitryVasilievich
    @DmitryVasilievich 3 роки тому +1

    Фух....получилось...спасибо-)

  • @x_tonystark_x
    @x_tonystark_x 4 роки тому

    День добрый, спасибо за полезное видео.
    Родился такой вопрос, а если нужно выводить определенное число зависимых списков больше чем 1, есть ли способ это реализовать?
    Например выбираем: apple> список с айфонами (в 1 столбце), список с айфонами (во 2 столбце), список с айфонами (в 3 стобце) и т.д.

    • @stmsolution
      @stmsolution  4 роки тому

      Конечно, все на основании базы данных как построете

  • @worldtech2770
    @worldtech2770 2 роки тому +1

    Все круто, но жаль что ofset применяется на других листах при редактировании, не могу решение найти(

    • @stmsolution
      @stmsolution  2 роки тому +1

      If прописываете типо if (ss.getActiveSheet().getName()==="Лист1"){то выполняем весь код внутри}

    • @worldtech2770
      @worldtech2770 2 роки тому

      @@stmsolution Спасибо!

    • @worldtech2770
      @worldtech2770 2 роки тому +1

      @@stmsolution Подскажите пожалуйста, во у меня есть дата 10.12, как мне сделать так что бы когда было 12.10
      запускался нужный код? делали подобное ?

  • @user-Maksim-ka
    @user-Maksim-ka 3 роки тому +1

    Как сделать, что бы искомое значение было не в первом столбце, пятый час мучаюсь !

    • @stmsolution
      @stmsolution  3 роки тому

      пропишите поиск в нужном столбце.

  • @user-te4zh2dz9r
    @user-te4zh2dz9r Рік тому

    дякую

  • @alexandermanzhula5155
    @alexandermanzhula5155 3 роки тому

    Благодарю за урок! Все работает кроме, когда добавляю
    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
      @stmsolution  3 роки тому +1

      Надо смотреть ошибку, что выдает, плюс надо понимать что именно вы делаете.

    • @alexandermanzhula5155
      @alexandermanzhula5155 3 роки тому

      @@stmsolution Хочу понять как можно добавить еще уровни.
      У вас в примере Apple > Iphone X
      А как можно добавить еще 1 уровень? Apple > Iphone X > 256gb
      или еще так: Apple > Iphone X > 256gb > Gold
      Если есть решение, напишите пожалуйста.

  • @skymani1
    @skymani1 3 роки тому

    спасибо!
    Как сделать, чтобы скрипт работал с несколькими листами, куда подставляются данные по выпадающим спискам?

    • @stmsolution
      @stmsolution  3 роки тому

      Пропишите их в скрипте

  • @pjcompany4539
    @pjcompany4539 3 роки тому

    Все прекрасно работало, но вдруг перестало, во втором выпадающем списке пишет загрузка, такое на всех компах в разных браузерах. На телефоне и планшете все работает. В чем может быть проблема?

    • @stmsolution
      @stmsolution  3 роки тому

      удалите проверку данных и сделайте заново, гугл глючит

  • @keks7712
    @keks7712 3 роки тому

    Видео интересное, а нельзя ли сделать отдельное видео "Как задать текстовому ответу цифровое значение в Таблице Гугл Форм"?

    • @stmsolution
      @stmsolution  3 роки тому

      Не совсем понятен вопрос.

  • @Slavutich1997
    @Slavutich1997 4 роки тому

    Здравствуйте. Можно вопрос не по теме видео?
    Скажите, пожалуйста, можно ли сделать так чтобы пользователи не работали с одной общей гугл таблицей одновременно, а для каждого создавался свой временный экземпляр? Просто суть моего проекта в том что пользователи вводят некоторые данные на листе и получают соответствующий результат и вмешательство одного пользователя в процесс ввода данных другим пользователем недопустимо.
    Или может быть можно ограничить число одновременно редактирующих конкретный лист пользователей до одного?

    • @stmsolution
      @stmsolution  4 роки тому

      Сделайте листы для каждого пользователя отдельно и поставьте им доступ только для них, все

    • @Slavutich1997
      @Slavutich1997 4 роки тому

      @@stmsolution проблема в том что пользователи - случайные люди, т.е. я не знаю их заранее

  • @PticaGo
    @PticaGo 3 роки тому

    Добрый день, подскажите пожалуйста как, адаптировать ваш скрипт под строки.
    Вот мой вариант, проблема в том, что 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  3 роки тому

      У вас values это один столбец, по этому ничего вы не получите таким образом попробуйте ноль убрать

    • @PticaGo
      @PticaGo 3 роки тому

      @@stmsolution ноль убирать пробовал не помогает, можно к вам обратится для доработки этого скрипта? самому знаний не хватает, а разбираться времени нет

  • @yura_vladimirovich
    @yura_vladimirovich 3 роки тому

    До этого объявляли с помощью var, теперь let

    • @stmsolution
      @stmsolution  3 роки тому +1

      Поменялся стандарт объявления переменных , var устарело.

  • @LudmilaGobova
    @LudmilaGobova 4 роки тому

    Спасибо за нужную мне информацию. Но у меня в скрипте в строке let col = values(0).indexOf (valToFind); ошибка. Не могу разобраться и исправить. Если можно, помогите, пожалуйста.

    • @stmsolution
      @stmsolution  4 роки тому +2

      values[0]

    • @user-vz1jo5zr7t
      @user-vz1jo5zr7t 4 роки тому +2

      Аналогично! indexOf(valToFind) не работает с getRange().getValues()! Как у автора всё получилось - не понятно...

    • @autocrash9191
      @autocrash9191 3 роки тому

      @@user-vz1jo5zr7t квадратные скобки

  • @railkadikov
    @railkadikov 3 роки тому

    Добрый день! Спасибо! Я новичок. Как убрать следующий момент: скрипт начинает срабатывать на второй вкладке, на которой мы записываем базу для выпадающих списков?

    • @stmsolution
      @stmsolution  3 роки тому +1

      Пропиши условие, что бы проверял нужный ли лист используется, а вообще код желательно посмотреть.

    • @railkadikov
      @railkadikov 3 роки тому

      @@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);
      }

    • @railkadikov
      @railkadikov 3 роки тому

      @@stmsolution помоги плиз

  • @Yuriy185000
    @Yuriy185000 4 роки тому

    Скажите, пожалуйста, как в форме-гугл можно запретить редактировать её, если в одном из полей указана дата раньше сегодняшней? Необходимо запретить редактирование ответа на форму за прошедшее число. Можешь есть схожий метод в скриптах ss?

    • @stmsolution
      @stmsolution  4 роки тому

      За такое не слышал, посмотрите в документации formapp

    • @Yuriy185000
      @Yuriy185000 4 роки тому

      STM Solution А есть ли подобная функция в таблицах? Нужно запретить редактирование таблицы в зависимости от значения ячейки

  • @user-bs2xu3fy4x
    @user-bs2xu3fy4x 2 роки тому

    Скажи пожалуйста, а ActiveCell можно заменить на фиксированный столбец в массиве?

    • @stmsolution
      @stmsolution  2 роки тому

      Не совсем понял что хотите

    • @user-ug3ye2hv7l
      @user-ug3ye2hv7l 2 роки тому +1

      @@stmsolution Приветствую. У меня похоже тот же вопрос. как доработать скрипт таким образом, чтобы в 6 строке вашего скрипта присваивать переменную 'ar' не активной ячейке, а целому диапазону например из 20 строк в первом столбце. например если данные из первого столбца не являются выпадающим списком, а возвращаются по другому условию. У меня получилось реализовать это условие только на первой строке листа "Общий", указав в 6 строке скрипта вместо getActiveCell() getRange(3,1)выбрав конкретную ячейку, но как применить это к остальным 20 строкам вниз - не понимаю. Куда копать?

    • @stmsolution
      @stmsolution  2 роки тому +1

      @@user-ug3ye2hv7l массивы, получайте столбец со значениями через getRange().getValues() и потом по этому массиву через цикл пробегайте вытаскивая каждый элемент массива отдельно

    • @user-ug3ye2hv7l
      @user-ug3ye2hv7l 2 роки тому +1

      @@stmsolution , благодарю) Ответы я так понимаю в уроке про Циклы for и while) Верно?

    • @stmsolution
      @stmsolution  2 роки тому +1

      @@user-ug3ye2hv7l да и в уроках про массивы

  • @user-yc8vl3fb2p
    @user-yc8vl3fb2p 4 роки тому

    Вопрос по ходу. на 8:47 (сразу растяну...) и появились в нижних ячейках списки. Как это произошло?

    • @stmsolution
      @stmsolution  4 роки тому +1

      ua-cam.com/video/kFEmwZhn9w4/v-deo.html добрый день, посмотрите в этом видео, я рассказываю об этом, в правом нижнем углу квадратик зажимаем и тянем в низ

    • @user-yc8vl3fb2p
      @user-yc8vl3fb2p 4 роки тому

      @@stmsolution Спасибо

  • @workprimer4894
    @workprimer4894 3 роки тому

    Когда корректируешь значения в таблице, то постоянно появляется "Проверка данных". Самопроизвольно. И в любом месте. Можно заменить getActiveCell на какой-то другой метод?

    • @stmsolution
      @stmsolution  3 роки тому

      Пропишите условия типо что бы срабатывало только в конкретной ячейке

    • @workprimer4894
      @workprimer4894 3 роки тому

      @@stmsolution А можешь направление указать, с чего именно начать)))? Буду благодарен.

    • @workprimer4894
      @workprimer4894 3 роки тому

      Я вношу данные в следующую ячейку в ручную, после выбора значений в двух подряд выпадающих списках. Если что-то удаляю, то в соседней ячейке срабатывает скрипт.

    • @workprimer4894
      @workprimer4894 3 роки тому

      @@stmsolution Первый вариант скрипта работает без этой проблемы. Только и автоматическую очистку ячейки пришлось тоже отменить.

  • @kiska5971
    @kiska5971 3 роки тому

    Добрый день. Идентичный вашему код вставляет справа от первого столбца выпадающий список не только на листе Общий, но и на листе База аналогично. Можете пояснить как исправить, чтобы скрипт работал только на листе Общий, или это глюк какой-то?

    • @kiska5971
      @kiska5971 3 роки тому

      Больше того если другие листы создавать, скрипт работает и на них, если в первой колонке вводить данные то появляется проверка справа

    • @kiska5971
      @kiska5971 3 роки тому

      Добавил условие, если название листа не равно Общий, не выполнять скрипт дальше.

    • @pa_shi
      @pa_shi 6 місяців тому

      @@kiska5971 Подскажите пожалуйста, как это прописать в коде

  • @user-pj4oh6mx9d
    @user-pj4oh6mx9d 3 роки тому

    Спасибо!

  • @user-vb9tg3sg8s
    @user-vb9tg3sg8s 3 роки тому

    Отличный ролик! Но как заставить работать скрипт только в двух ячейках конкретного листа? Триггером onEdit почему то не получается, хотя в условии прописан конкретный лист. Он либо работает на всех листах, либо не работает вообще

    • @you-tube36
      @you-tube36 3 роки тому

      Чтобы script работал только на определенном листе (например: лист с именем "sh1") необходимо весь код функции выполнять при условии что активный лист == sh1
      Использовать условие:
      if ( активный лист==sh1) [
      тело скрипта
      ]
      Нет под рукой компьютера допишу по возможности.

    • @user-vb9tg3sg8s
      @user-vb9tg3sg8s 3 роки тому

      @@you-tube36 Спасибо!

    • @pa_shi
      @pa_shi 6 місяців тому

      @@you-tube36 Подскажи, какой код прописать