• Как передать параметры из функции в QUERY?

    @remaikee Автор вопроса
    Огромное всем спасибо за присланные ответы! Они натолкнули меня на мысль и задачка была решена!

    Собственно хотел заставить работать встроенную гугловскую функцию QUERY с наименованиями полей в передаваемой таблице. Решение напрашивалось самое простое - заменить в запросе наименования полей на соответствующие наименования Col1, Col2 и т.д. Надо было только найти красивое решение как перехватывать запрос и на лету изменять его:)

    Ниже найденное мною решение. Возможно кто-то решит его доработать - присылайте свои варианты :)

    Решение:

    В Google.Docs есть такая штука, как именованные функции: https://support.google.com/docs/answer/12504534

    В итоге я через именованные функции сделал свою:
    M_QUERY(диапазон, запрос)
    которую описал как:
    =QUERY({диапазон}; Q(диапазон; запрос))

    а в Apps Script описал функцию Q, которая и обрабатывает передаваемые запросы:
    function Q(table, query){
      console.log(query);
      if (table[0].map){
        table = table[0];
        for(var key in table){
          query = query.replaceAll('`'+table[key]+'`', 'Col'+(1+Number(key)));
        }
      }
      return query;
    }


    Собственно все подготовительные операции проведены и можно в таблицах гугл использовать созданную функцию M_QUERY

    Берём таблицу вида:
    6356da09f2f86969780191.png
    где первая строка содержит наименования полей

    и на требуемом листе пишем формулу:
    =M_QUERY(1:1000; "select `ID` where `ASIGNED_BY` like '%Иванов%'")
    "1:1000" - заменяем на диапазон, содержащий исходные данные :)

    Профит!
    Ответ написан
    Комментировать