Решение
Возможный обходной путь для решения вашей проблемы - сортировка только по диапазону дат, которые есть сегодня или позже. Для этого выполните следующие действия:
- Сортируйте диапазон в порядке возрастания по столбцу даты (1).
- Поиск первого элемента, который равен или превышает текущую дату.
- Выберите новый диапазон, который начинается со строки элемента, найденной на предыдущем шаге.
- Выполните функцию сортировки для этого нового диапазона.
Вот фрагмент кода для выполнения этой задачи, поясненный комментариями:
function sort() {
//Variable for column to sort first
var sortFirst = 1;
var sortFirstAsc = true;
//Variables for column to sort second
var sortSecond = 2;
var sortSecondAsc = true;
//Variables for column to sort third
var sortThird = 4;
var sortThirdAsc = true;
//Number of header rows
var headerRows = 1;
/** Define variables */
/** Sorting function **/
var activeSheet = SpreadsheetApp.getActiveSheet();
var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
var range = sheet.getRange(headerRows+1, 1, sheet.getMaxRows()-headerRows-1, sheet.getLastColumn());
// Sort the whole range by date in ascending order
range.sort([{column: 1, ascending: true}]);
// Get the date values of the first column to then compare them to today's date. Flat is used to create a 1D array as getValues() will return a 2D array and to make things simpler
var getDateValues = sheet.getRange(headerRows+1, 1,sheet.getLastRow()-1,1).getValues().flat();
// Initialise today's date. As we are only interested on comparing the date, we set the starting time at 00am. We also start a variable to store the index of the row where dates are equal or higher than today.
var today = new Date().setHours(0,0,0,0);
var indexStartRange;
// Loop through all dates values
for(i=0;i<getDateValues.length;i++){
// Create date object for each value
var date = new Date(getDateValues[i]);
// if this date is equal or higher than today, then we store the value of its index and break the loop.
if(date.valueOf() >= today.valueOf() ){
indexStartRange = i + 2;
break;
}
}
// create a final range starting from the row where dates start being equal or higher than today and just run as you did in your example before.
var finalRange = sheet.getRange(indexStartRange, 1, sheet.getLastRow(), sheet.getLastColumn());
finalRange.sort([{column: sortFirst, ascending: sortFirstAsc}, {column: sortSecond, ascending: sortSecondAsc}, {column: sortThird, ascending: sortThirdAsc}]);
}
Надеюсь, это помогло вам. Дайте мне знать, если вам нужно что-то еще или вы что-то не поняли. :)