#javascript #google-apps-script #google-sheets #google-forms
#javascript #google-apps-script #google-sheets #google-формы
Вопрос:
Привет полезным участникам,
У меня есть таблица Google ответов, в которой есть набор данных с разными типами значений данных (скриншот), как показано ниже. Значения временных меток Col2 автоматически генерируются при вводе пользователем в gform. Я переместил его как col2 (по умолчанию в col1), потому что я хочу поместить идентификатор цитаты в качестве столбца первичного ключа. Значения идентификатора цитаты генерируются автоматически на основе Google script, который запускается при отправке gform:-
таблица ответов с несогласованной сортировкой
Я предполагал, что у нас будет автосортировка диапазона данных по метке времени (и мне это очень нужно для сортировки по метке времени), но это не согласуется с моим. Я уже пробовал приведенные ниже коды, но все еще не работает последовательно. Но когда я сортирую его вручную на листе, используя фильтр функций, чтобы выбрать столбец метки времени, а затем отсортировать A-> Z, он работает нормально. Но это не будет эффективно для моих требований
Способ 1 :
// this resulted as in the screenshot.
SortRange = "A2:AC";
SortOrder = [{column:2, ascending: true}];
function multiSortColumns(){
var range = msheet.getRange(SortRange);
range.sort(SortOrder);
}
Способ 2 :
// some sorted, some not but still wrong and not ascending order.
SortRange = 2,1,sheet.getLastRow() - 1, sheet.getLastColumn();
SortOrder = [{column:2, ascending: true}];
function multiSortColumns(){
var range = sheet.getRange(SortRange);
range.sort(SortOrder);
}
Способ 3
var sheet=SpreadsheetApp.getActiveSheet().sort(2);
// this doesn't sort by specific column we want and it includes sorting the header.
Пожалуйста, помогите исправить мой код. Tqvm заранее.
Комментарии:
1. Вы запускаете эту функцию в триггере formSubmit? Почему временные метки перепутались в первую очередь? Обычно форма отправляет данные на лист назначения в хронологическом порядке.
2. @ziganotschka OP, возможно, вручную отсортировал другие столбцы
Ответ №1:
Потенциальные проблемы:
-
Первые два метода в вашем вопросе, похоже, не определяют
sheet
объект. -
Также я даже не уверен, выполняете ли вы
multiSortColumns
вообще. -
Третий метод также отсортирует заголовок.
-
Еще одна потенциальная проблема может возникнуть при использовании:
const sheet = ss.getActiveSheet();
Последний рассматривает активный лист, который может быть любым из выбранных листов в файле электронной таблицы.
Вместо этого я бы посоветовал вам использовать:
const sheet = ss.getSheetByName("Form Responses 1");
предполагая, что имя листа, который вы хотите отсортировать, является Form Responses 1
Решение:
Вот модифицированная версия вашего второго метода, который гарантирует, что все выполняется при выполнении myFunction()
:
function myFunction() {
const ss = SpreadsheetApp.getActive();
// const sheet = ss.getActiveSheet(); // not recommended
const sheet = ss.getSheetByName("Form Responses 1"); // recommended
sheet.getRange(2, 1, sheet.getLastRow() -1, sheet.getLastColumn()).sort({column: 2, ascending: true});
}
Комментарии:
1. Да, ваше решение работает, @Marios! Спасибо! Извините, ранее я не упомянул основную функцию, в которой я вызываю функцию сортировки. Я подумал, что это не имеет значения, чтобы выделить проблему, потому что до этого эта функция (метод 1) работала просто отлично, поскольку я тестировал ее несколько раз, прежде чем использовать ее с июля. Я заметил, что он внезапно перестал работать, когда я тестировал ввод адресов, отличных от gmail, и это повлияло на другие записи с адресом gmail с тех пор. довольно странно. Я надеюсь, что ваш скрипт будет работать вечно. Спасибо!