К основному контенту

Форматирование строки при отправке Формы


Некоторые пользователи предпочитают, чтобы форматирование присутствовало на всех листах. При отправке Формы в Таблицу добавляется новая строка, и она не заимствует никакого форматирования. Справиться с этой проблемой может устанавливаемый на событие onFormSubmit скрипт следующего содержания:
/**
 *
 * @param {GoogleAppsScript.Events.SheetsOnFormSubmit} e
 */
function onformsubmit(e) {
  const sheet = e.range.getSheet();
  sheet
    .getRange('1:1')
    .copyTo(sheet.getRange(`${e.range.getRow()}:${e.range.getRow()}`), {
      formatOnly: true,
    });
}

Посмотреть как это работает можно тут:
Не забудьте зарегистрировать функцию onformsubmit для события On Form submit

Что происходит:
  1. Событие вызывает onformsubmit
  2. Получаем текущий лист
  3. Берем диапазон "1:1" листа
  4. Копируем только форматирование в диапазон, который изменился благодаря форме
3й пункт можно поправить под текущие требования, например, это может быть вторая строка '2:2'.

Комментарии

  1. А как будет выглядеть функция автосортировки Ответов, т.е. при отправке Формы в Таблицу добавляется новая строка и она становиться первой в списке?

    ОтветитьУдалить
    Ответы
    1. До сих пор не рекомендуют этого делать, т.к. Форма привязывается к конкретной области данных. Создайте новый лист и перенесите туда данные с помощью формулы. Например, SORT или QUERY

      Удалить
    2. использовал Sort, но дело в том, что в Ответах есть поле, где надо поставить отметку (в моем случае это поле с Флажком) и вот в этом случае сортировка при помощи формулы не годится, она сразу уходит в ошибку. На просторах инета я нашел вот такие коды по автосортировке:

      function onEdit() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var range = sheet.getRange(3, 1, sheet.getLastRow() - 2, sheet.getLastColumn());
      range.sort({column: 1, ascending: false});
      }

      или

      function onEdit(event){
      var sheet = SpreadsheetApp.getActiveSheet();
      var editedCell = sheet.getActiveCell();
      var columnToSortBy = 1;
      var tableRange = "A2:H"; // What to sort.
      if(editedCell.getColumn() == columnToSortBy){
      var range = sheet.getRange(tableRange);
      range.sort( { column : columnToSortBy, ascending: true } );
      }
      }

      Они работают, но если только нажать на выполнение в редакторе скриптов. Я простой юзер google docs, незнакомый с JS поэтому подскажите, пж, что значит зарегистрировать функцию для события On Form submit? И как все это "допилить"?

      Удалить
    3. Первый код у вас должен работать при каждом изменении данных пользователем. Например, вы ставите галочку в Таблице (не в Форме).

      Приведите пример ваших данных. А лучше пример Таблицы и Формы сразу.

      Удалить
    4. Да, так и есть, работает если в самой таблице изменения делать, поэтому я так понял надо увязать событие на форме еще..
      Высылаю Форму и Ответы:
      https://forms.gle/tPJ89A9Hkgrkk8x19
      https://docs.google.com/spreadsheets/d/1itCtCDvUF__GuVRZwTfEnNa_YgwWY6b-8XT4amG1I8w/edit?usp=sharing

      Удалить
    5. Мне нравится вот такой вариант

      https://github.com/contributorpw/google-apps-script-snippets/blob/master/snippets/sheets/sort_sheet_when_form_submit/sort_sheet_when_form_submit.js

      Вы все еще должны зарегистрировать триггер отправки Формы для функции onformsubmit. Для этого найдите в меню опцию "Триггеры текущего проекта" и добавьте функцию для соответствующего события.

      Удалить
    6. В этом примере Таблица одновременно форматируется и сортируется. Хотя, вероятно, форматирование вам ни к чему. Просто удалите лишний код, оставьте только вызов onEdit из onformsubmit

      Удалить
    7. Спасибо, вставил в редактор, к сожалению код не сортирует автоматически, только после ручной манипуляции.. (

      https://forms.gle/tPJ89A9Hkgrkk8x19
      https://docs.google.com/spreadsheets/d/1itCtCDvUF__GuVRZwTfEnNa_YgwWY6b-8XT4amG1I8w/edit?usp=sharing

      вставил и в форму и в таблицу, зарегил триггер и там и там, не работает (

      Удалить
    8. Отправил запрос на редактирование. Вероятнее всего, что-то с триггером.

      Удалить
    9. Добавил код установки https://github.com/contributorpw/google-apps-script-snippets/blob/master/snippets/sheets/sort_sheet_when_form_submit/sort_sheet_when_form_submit.js Скопируйте код и запустите install один раз из редактора.

      Удалить
  2. Просто когда много строк, то приходится крутить таблицу в самый низ, что совсем неудобно

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

Триггеры Google Apps Script

Все триггеры в скриптах делятся по виду события, типу установки и области применения. Области применения Таблицы Формы Документы Сайты Автономные скрипты  События Open - происходит при открытии файла в приложении Гугл. Например, Формы создают это событие только при открытии в режиме редактирвоания. Edit - происходит при завершении ввода данных в ячейку Таблицы пользователем. Только Таблицы. Только пользователем. Install - автоматически вызывается при установке дополнения. Change - возникает при других (не изменение данных ячейки, например, назначение цвета или ширины колонки) изменених Таблицы вызванных пользователем. Только Таблицы. Только пользователем. Form submit - исполнится только тогда, когда придет ответ от респондента Формы. Time-driven - отложенный триггер действия, срабатывающий по истечении времени Get - событие отрабатывающее get-запросы к веб-приложению Post - событие отрабатывающее post-запросы к веб-приложению Типы установок Simple ...

Пользовательское меню в Документах, Таблицах и Формах

Google Apps Script умеет создавать меню, содержание которого определяет разработчик. Меню может быть создано для приложений Таблиц, Документы или Формы (режим редактирования). Отличительной особенностью является то, что нельзя передать параметры в вызываемую через меню функцию. Принцип построения меню будет всегда одинаковый: Необходимо получить экземпляр среды пользовательского интерфейса Ui, позволяющий скрипту добавлять такие функции, как меню, диалоговые окна, боковые панели. Создать объект меню createMenu(). Наполнить меню возможными элементами: пунктами меню addItem(), подменю addSubMenu(), разделителями addSeparator(). Добавить меню в интерфейс, вызвав метод addToUi() Для того, чтобы меню появлялось сразу после открытия файла, необходимо добавить функцию создания меню в простой триггер onOpen(). 1. Пример простого приложения для Формы Создает пользовательское меню Содержимое меню Добавление текстового поля Отчет о Форме 2. Пример простого приложен...

Как открыть ссылку с помощью Google Apps Script?

Часто возникает задача, в которой требуется по результатам работы скрипта открыть ссылку в новом окне/вкладке браузера. В Google Apps Script не существует методов взаимодействия с браузером. Единственная более-менее реальная связь между пользователем и сервером скрипта находится в интерфейсе реализуемой программы. Это может быть Таблица, Документ или Web приложение. Все они реализуются через HtmlService. Например, SpreadsheetApp.getUi().showModelessDialog(htmlOutput, "title"); Понятно, что в построенном htmlOutput , можно выполнить код для текущего window . Например, window.open(url, "_blank"); Идея обернутая кодом ниже по тексту. Пользователь выбирает ячейку в Таблице (или все, что угодно, что формирует ссылку). На сервере На клиенте строится окно диалога, открывается новая вкладка браузера и закрывается окно диалога, при успешном выполнении условия. Иначе появляется сообщение, что переданный параметр не ссылка. Этот метод имеет существенный недостаток...