Adding sort function at the end of a script file

Viewed 46

I am trying to make sure sorting happens at the end of a script without adding a sleep function. having issues getting this to fire last. I need sorting to happen last so the sheet has time to finalize all other functions, otherwise i'm ending up with conditional formatting errors.

else if(s.getName() == "Pending Orders" && r.getColumn() == 20 && r.getValue() == "Shipped Partial Order") {
    
    if (s.getLastRow() + 10 > s.getMaxRows()) {
        s.insertRowsAfter(s.getLastRow(), (s.getLastRow() + 10) - s.getMaxRows());
      }
    
        var row = r.getRow();
        var numColumns = s.getLastColumn();
    
        s.getRange(e.range.getRow(), 12).setValue('Partial Ship');
    if(!s.getRange(e.range.getRow(), 18).getValue()) {
                
        s.getRange(e.range.getRow(), 18).setValue(new Date())
      }
        
        var targetSheet = ss.getSheetByName("Partial Shipped");

        if(targetSheet.getLastRow() + 10 > targetSheet.getMaxRows()) {
                                                                  
            targetSheet.insertRowsAfter(targetSheet.getLastRow(), (targetSheet.getLastRow() + 11) - targetSheet.getMaxRows()); 
        }
    
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
        s.getRange(row, 1, 1, numColumns).copyTo(target);         
        s.getRange(row, 1, 1, numColumns).clearContent();
        s.getRange(row, 1, 1, numColumns).setBorder(true,false,false,false,false,false);
    
    var arr = s.getDataRange().getValues();
    for(var i=arr.length-1; i >=0; i--) {
      Logger.log(arr[i][0].toString());
        if(arr[i][0].toString() == '') {
          Logger.log('Deleting row ' + i);
          s.deleteRow(i+1);
        }
      }
    
    
    function sortRange(sheet, range, col) {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getActiveSheet();
      var range = ss.getActiveRange();
      var targetSheet = ss.getSheetByName("Partial Shipped");
      var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
       
      sheet.getRange(range).sort({column: 14, ascending: true}); // Is this done correctly? 
      sortRange(targetSheet, target, 14 );
    }
    
    SpreadsheetApp.getUi().alert('Partial Order Shipped.');
  
    }

1 Answers

If you want other Sheet manipulations completed before running a sort function a single flush() call is all that is required.

flush()

This will empty the Script's command buffer with the Sheet and before proceeding with the remainder of the script.

I won't cite your code as a direct example but in principle:

// do stuff with sheet
// add data

SpreadsheetApp.flush();

// sort data
Related