Некоторые пользователи предпочитают, чтобы форматирование присутствовало на всех листах. При отправке Формы в Таблицу добавляется новая строка, и она не заимствует никакого форматирования. Справиться с этой проблемой может устанавливаемый на событие 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
Что происходит:
- Событие вызывает
onformsubmit
- Получаем текущий лист
- Берем диапазон "1:1" листа
- Копируем только форматирование в диапазон, который изменился благодаря форме
3й пункт можно поправить под текущие требования, например, это может быть вторая строка
'2:2'
.
А как будет выглядеть функция автосортировки Ответов, т.е. при отправке Формы в Таблицу добавляется новая строка и она становиться первой в списке?
ОтветитьУдалитьДо сих пор не рекомендуют этого делать, т.к. Форма привязывается к конкретной области данных. Создайте новый лист и перенесите туда данные с помощью формулы. Например, SORT или QUERY
Удалитьиспользовал 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? И как все это "допилить"?
Первый код у вас должен работать при каждом изменении данных пользователем. Например, вы ставите галочку в Таблице (не в Форме).
УдалитьПриведите пример ваших данных. А лучше пример Таблицы и Формы сразу.
Да, так и есть, работает если в самой таблице изменения делать, поэтому я так понял надо увязать событие на форме еще..
УдалитьВысылаю Форму и Ответы:
https://forms.gle/tPJ89A9Hkgrkk8x19
https://docs.google.com/spreadsheets/d/1itCtCDvUF__GuVRZwTfEnNa_YgwWY6b-8XT4amG1I8w/edit?usp=sharing
Мне нравится вот такой вариант
Удалитьhttps://github.com/contributorpw/google-apps-script-snippets/blob/master/snippets/sheets/sort_sheet_when_form_submit/sort_sheet_when_form_submit.js
Вы все еще должны зарегистрировать триггер отправки Формы для функции onformsubmit. Для этого найдите в меню опцию "Триггеры текущего проекта" и добавьте функцию для соответствующего события.
В этом примере Таблица одновременно форматируется и сортируется. Хотя, вероятно, форматирование вам ни к чему. Просто удалите лишний код, оставьте только вызов onEdit из onformsubmit
УдалитьСпасибо, вставил в редактор, к сожалению код не сортирует автоматически, только после ручной манипуляции.. (
Удалитьhttps://forms.gle/tPJ89A9Hkgrkk8x19
https://docs.google.com/spreadsheets/d/1itCtCDvUF__GuVRZwTfEnNa_YgwWY6b-8XT4amG1I8w/edit?usp=sharing
вставил и в форму и в таблицу, зарегил триггер и там и там, не работает (
Отправил запрос на редактирование. Вероятнее всего, что-то с триггером.
УдалитьДобавил код установки https://github.com/contributorpw/google-apps-script-snippets/blob/master/snippets/sheets/sort_sheet_when_form_submit/sort_sheet_when_form_submit.js Скопируйте код и запустите install один раз из редактора.
УдалитьПросто когда много строк, то приходится крутить таблицу в самый низ, что совсем неудобно
ОтветитьУдалитьСпасибо! Все работает!
ОтветитьУдалить