在脚本文件末尾添加排序功能

时间:2019-01-17 16:26:29

标签: google-apps-script google-sheets

我试图确保排序在脚本末尾发生而不添加睡眠功能。遇到问题,最后无法解决。我需要排序才能最后完成,因此工作表有时间完成所有其他功能,否则我将遇到条件格式错误。

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 个答案:

答案 0 :(得分:1)

如果您想在运行排序功能之前完成其他工作表操作,则只需要一个flush()调用即可。

flush()

这将用表格清空脚本的命令缓冲区,然后继续执行脚本的其余部分。

我不会引用您的代码作为直接示例,但原则上:

// do stuff with sheet
// add data

SpreadsheetApp.flush();

// sort data