• Как связать существующий лист и Google форму?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Хороший и всех беспокоящий вопрос. Короткий ответ: "Никак".

    Этого невозможно сделать, т.к. первоисточником является Форма, а не Таблица. В вашем случае, просто получайте данные в новый лист, а форматирование скопируйте инструментом, обозначенным как валик.
    Ответ написан
    1 комментарий
  • Партнер в google forms вводит реквизиты и получает счет в excell. Как?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Вам придется программировать.

    Базовая идея заключается в том, что пользователь отправляет Google Форму с некоторым необходимым количеством идентификационных данных. В системе Диска инициируется событие, которое называется "Отправка Формы". Это событие можно перехватить с помощью приложения Google Apps Script. Дальше как ваша фантазия пожелает. Следующие сценари могут быть реализованы:
    • Отправляется только идентификатор, на почту отправляется счет на сумму остаттка(аванса)
    • Отправляются реквизиты, по которым находится почка, на которую отправляется счет на сумму остаттка(аванса)
    • Предыдущие пункты расширяются за счет отправки суммы счета
    Ответ написан
    Комментировать
  • Как загружать последнюю версию таблицы Google Spreadsheet?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    SpreasheetApp.flush();
    Ответ написан
    Комментировать
  • Googlee docs - как можно добавить свою кнопку для обертки определенного текста HTML тегами?

    oshliaer
    @oshliaer
    Google Products Expert
    Идея неплохая, но пока невыполнимая. Максимум, что вы можете сделать, это добавлять комментарии, но поиск по ним происходит невсегда, если вообще происходит.
    По большому счету, вы ожидаете некоторый слой метеданных над тектом Документов Гугл. Таких возможностей пока нет.

    Попробуйте отправить передложение по улучшению продкута https://gdriveru.blogspot.se/2017/04/reportproblen...
    Ответ написан
    Комментировать
  • Как получить названия папок(путь) что хранят файл?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Абсолютно бесполезное занятие, которое требует больших ресурсов. Плюс, на Диске могут быть папки в папках своих папок. Как вам такой поворот?

    Решение доступно в этом топике How do I locate the path of the folder in which th...
    Ответ написан
    Комментировать
  • Как сделать что бы при ставке чисел убирались лишние символы в гугл док?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Если данные заполняются оператором, то скорей всего, ему потребуется инструмент для нормализации данных. Это может быть как локальная программа, например, расширение браузера, так и дополнение к самим Таблицам.

    Пример работы дополнения.
    Пользователь открывает боковое меню, которое остается открытым весь период работы
    5aba02ef6e9b3253891467.png

    Добавляет значение из буфера в верхнее поле, получает результат в нижнем поле. Возможно заполнение буфера новым значением автоматически
    5aba03516b237273893919.png
    Ответ написан
    Комментировать
  • Превышено максимальное время выполнения Google Script, как решить?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Ваш же вопрос тут Максимальное время выполнения скрипта Google Script

    К тому же не ведете переписку по другим вопросам.

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

    if (continuationToken == null) {
      var files = DriveApp.getFiles();
    } else {
      var files = DriveApp.continueFileIterator(continuationToken);
    }
    где continuationToken заранее получен и извлечен из внешнего хранилища.
    
    if(files.hasNext()){
      var continuationToken = files.getContinuationToken();

    Для автоматического перезапуска скрипта вы должны создавать триггеры времени.

    Чтобы представить всю масштабность задачи, можете взглянуть на готовое приложение для копирования Диска ericyd/gdrive-copy

    Также существует несколько сниппетов и библиотек, которые позволяют "продлить" исполнение тем же методом, который я описал выше.
    Ответ написан
    Комментировать
  • Как сделать, чтобы функция срабатывала, когда значение ячейки в таблице меняется формулой?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Виктор Фамильевич, никак. Это особенность среды исполнения.

    Но у вас нет причин искать вызова триггера при таких условиях. Что-то же меняет это значение? Подпишитесь на изменение этого "что-то же" или дублируйте их.
    Ответ написан
    Комментировать
  • Как реализовать принцип сбора данных Google Forms для Google Sheets?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    sashka_shishka, внимательно прочитайте свой вопрос "... будут отправлять свои заказы в сборную таблицу и ... не будут иметь доступа к ней ..." и попробуйте справиться с противоречиями самостоятельно.

    Отправляя Форму, Респондент передает право Владельцу обработать его данные. Никакого форсированного внесения данные не происходит.

    К сожалению, общее (большинства) представление о доступе к Диску и его файлам очень сильно отличается от реальности. Ваша идея штатными средствами Диска недостижима. Есть возможность создания веб-приложения на базе Google Apps Script, которое будет "так" делать.

    Другим вариантом можно потратиться на GSuite Business и сделать форму в App Maker

    Вы пробовали IMPORTRANGE, импортируя данные из частных Таблиц в сводную.
    Ответ написан
    Комментировать
  • Как в запросе с Group By найти значения столбца в строках по которым не делается группировка?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Вероятно, речь идет о Таблицах Google и о формуле QUERY. Вы не можете произвести такой расчет.
    Ответ написан
    Комментировать
  • Как быстро составить филворд из заданного списка слов?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Как вариант, использовать Google Apps Script

    Берем набор слов
    5ab5543fa709d979929499.png

    Колдуем
    5ab5549085e47511989329.png

    Получаем
    5ab5549c9df60121044185.png

    =====================================================

    Пример для копирования

    Я использовал библиотеку bunkat/wordfind, поэтому параметры настройки ширины и высоты необходимо брать из нее. Необходимо так же учесть, что иногда, при задании размеров, количества попыток для создания массива кроссворда может не хватить - перехватывайте это событие.
    Ответ написан
    Комментировать
  • Как запретить ввод одинакового текста в гугл док?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Попробуйте проверку данных (Данные дальше > Проверка данных)

    Основная формула =COUNTIF($A:$A;"="&A1) < 2

    Пример настройки
    5ab52e8aaffa2151314854.png

    Сообщение, если введеные повторяющиеся данные
    5ab52eaa2dbe5113291625.png

    Пример Таблицы Как запретить ввод одинакового текста в гугл док? ...
    Ответ написан
    3 комментария
  • Где ошибка в коде Google Script для экспорта в txt?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Замените
    var values = SpreadSheets.getRange(i, c).getValue();

    на
    var values = SpreadSheets.getRange(i, c).getValues();


    Но я бы так не делал. Диск - сложная экосистема датчиков и инициирующих событий. Возможно, вы могли бы несколько углубиться в изучение и постичь дзен событийной модели, авось, что-то будет работать более плавно и без сбоев, и реально онлайн.
    Ответ написан
    Комментировать
  • Как в spreadsheets задать фиксированную высоту ячейки?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Никак. Многострочные ячейки будут отображаться по высоте количества строк в их.
    Ответ написан
    Комментировать
  • Как правильно использовать LockService в Google Apps Script?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Метод waitLock вызывает исключение, обрабатывайте его.

    var lock = LockService.getPublicLock();
    try {
      lock.waitLock(30000);
      return success();
    } catch (err) {
      Logger.log('Could not obtain lock after 30 seconds.');
      return failure();
    }


    Для неразрывности функции используйте tryLock. Этот метод заворачивает результат блокировки в булево значение:
    var lock = LockService.getPublicLock();
    var success = lock.tryLock(30000);
    if (!success) {
      Logger.log('Could not obtain lock after 30 seconds.');
    }
    Ответ написан
    Комментировать
  • Как в автоматическом режиме закачать файлы с google drive?

    oshliaer
    @oshliaer
    Google Products Expert
    В идеальном случае, когда все сделано правильно, пользователь должен был предоставить ссылку на папку, которую вы можете добавить к себе на Диск или загрузить как zip-архив.

    Я предпочитаю в данном случае rclone.org:
    rclone copy drive:SharedFolder /tmp/SharedFolder

    Другой способ - получить прямые ссылки на загрузку оригинального файла. Например, используя Gogole Apps Script #пример

    5a16addc560ef766126864.png

    1. Скопируйте файл
    2. Добавьте свои URL в колонку A
    3. Вызовите пользовательское меню. Будет заполнена колонка D


    Далее можно кликать список или добавить его в менеджер загрузок, или сохранить в файл для wget/curl
    Ответ написан
    Комментировать
  • Как организовать сбор изменения цен в Гугл таблице?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Можно использовать Google Apps Script

    Самый простой способ
    Запустите триггер основанный на времени для функции myF

    function myF(){
      var data = get_();
      Logger.log(data);
      append_(data);
    }
    
    function get_(){
      var sheet = SpreadsheetApp.openById("986327f36403948feb4a")
        .getSheetByName("Sheet1");
      return sheet.getDataRange().getValues().slice(sheet.getFrozenRows());
    }
    
    function append_(data){
      var d = new Date();
      var values = data.map(function(row){
        row.unshift(this.d);
        return row;
      }, {d:d});
      var sheet = SpreadsheetApp.openById("579e832d1ced2a2cc76c")
        .getSheetByName("Sheet2");
      sheet.getRange(sheet.getLastRow() + 1, 1, values.length, values[0].length).setValues(values);
    }


    Правильный способ

    Вам необходимо реализовать функцию, которая будет получать данные с сайта, преобразовывать их в табличный вид data и добавлять в Таблицу append_(data). Добавить эту функцию в триггер основанный на времени.
    Ответ написан
    Комментировать
  • Как в Google Apps Script отличить запуск ф-ии по триггеру своего и чужого аккаунта?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Возможно, вы уже читали статью "Эффективный пользователь против Активного", на основании которой ваш вопрос можно считать риторическим. Если у вас, конечно, gmail аккаунт, а не G Suite.

    Подтверждая ваши слова, вам необходимо создать один standalone скрипт. Позволить каждому пользователю зарегистрировать триггер - каждый сам себе. При такой настройке, во время срабатывания скрипта для каждого владельца скрипта в Active User будет его email, иначе пусто.

    Но тут существует подводный камень. Это не всегда работает. В какой-то момент Google раскрыл для владельцев (не G Suite) адреса Effective Users. Это было неприятно. Представьте, я даю вам доступ по ссылке, вы открываете Таблицу, а мой триггер onOpen уже знает, кто вы есть (ну, как минимум ваш адрес электронной почты). Что было делать - отрубить и не давать.

    Как можно решать вашу проблему? Нет эффективных методов решения этой задачи. Они либо громоздкие, либо слишком мутные, чтобы оставаться в рабочем состоянии долгое время.

    Я одно время использовал монитор почты, но пользователю необходимо подписаться на изменения в Таблице. Может быть в новом API есть возможность подписать пользователя автоматически?
    Ответ написан
    3 комментария
  • Как в Google sheets пропускать строку, если ЛОЖЬ?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Я бы предпочел для этой задачи QUERY. VLOOKUP хорош, но как-то он ни к селу ни к городу в данном случае.

    5a0eaf8d354c4705112266.png

    Пример Таблицы https://docs.google.com/spreadsheets/d/1NvXvZbXXcD...

    Сама формула
    =QUERY('Данные'!A:K;"select D, E, F, H, I where C='Белградская'")

    Формула в контексте задачи
    =QUERY(K:U;"select N, O, P, R, Q where M='Белградская'")


    Другим вариантом может быть формула FILTER. Сказать по правде, она более "универсальна"
    =FILTER({'Данные'!D2:F\'Данные'!H2:I};'Данные'!C2:C="Белградская")


    5a11a5023b426818811811.png
    Ответ написан
  • Как передать группу значений checkbox в форме?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    [Ljava.lang.Object;@556935f1 - это массив. Таблицы не поддерживают сложные типы. Попробуйте привести массив к строке.
    Вместо form['checkbox_name[]']
    можно form['checkbox_name[]'].join(', ')
    или JSON.stringify(form['checkbox_name[]'])
    как вариант предыдущего
    JSON.stringify(form['checkbox_name[]'], null, '  ')
    Ответ написан
    1 комментарий