Похоже, что v1
содержит ваши данные (без заголовков), и вы помещаете ключи в col
, который добавляется в качестве дополнительного столбца только для целей сортировки, затем вы сортируете всю вещь по ключи. Если я правильно понял, ваши заголовки должны быть где-то в отсортированных данных, так как я не думаю, что getDataRange достаточно умен, чтобы игнорировать ваши заголовки.
Интересно, что произойдет, если вы замените:
sheet.getDataRange().sort([{column:sheet.getLastColumn(),ascending:true}]);
с:
sortThis = sheet.getRange(2, 1, rows - 1, cols + 1)
sortThis.sort([{column:sheet.getLastColumn(),ascending:true}]);
// getRange parameters:
// 2 : skip a row for the headers
// 1 : start with the leftmost column
// rows - 1 : get one fewer than the original row count (to exclude the headers)
// cols : get one more than the original column count (to include the extra)
Кроме того, я думаю, что цикл в конце захватывает все на листе, а затем удаляет последний столбец (который был введен только для целей сортировки), а удаленный код заменяет лист результатом. Если вы не собираетесь звонить setValues(vf)
, то можете также пропустить любой другой код, который также ссылается на vf
.
Основано на https://stackoverflow.com/a/42224466/1054322 Интересно, можете ли вы вместо этого использовать getDisplayValues()
. Я не увидел setDisplayValues()
в справочнике по API, поэтому я предполагаю, что ваше форматирование теряется при чтении, а не при записи, и, кроме того, setValues()
не будет также clobber Ваше форматирование. Не уверен, что это помешает сортировке, поскольку displayValues может переносить данные и, следовательно, сортировать по-разному.