一些帮助将不胜感激。我有以下代码:
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 sheetName = activeSheet.getSheetName(); //name of sheet to be sorted
var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
var range = sheet.getRange(headerRows+1, 1, sheet.getMaxRows()-headerRows-1, sheet.getLastColumn());
range.sort([{column: sortFirst, ascending: sortFirstAsc}, {column: sortSecond, ascending: sortSecondAsc}, {column: sortThird, ascending: sortThirdAsc}]);
}
它可以正常工作,但是现在我只想在A列中的日期为TODAY或更大时订购。
Image of sheet 我只想在第3行下面排序。
有什么想法可以实现吗?
预先感谢;)
答案 0 :(得分:0)
解决问题的一种可能的解决方法是仅在今天或以后的日期范围内进行排序。请按照以下步骤来实现:
这是完成此任务的代码段,并带有注释:
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}]);
}
我希望这对您有所帮助。让我知道您是否需要其他任何东西,或者您是否不了解。 :)