Добавление функции сортировки в конец файла скрипта - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь убедиться, что сортировка происходит в конце скрипта без добавления функции сна. возникли проблемы с тем, чтобы это продолжалось Мне нужно, чтобы сортировка выполнялась последней, чтобы у листа было время для завершения всех остальных функций, в противном случае я получаю ошибки условного форматирования.

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 голосов
/ 17 января 2019

Если вы хотите, чтобы другие манипуляции с листами выполнялись до запуска функции сортировки, достаточно всего одного вызова flush().

вровень ()

Это очистит буфер команд сценария вместе с таблицей и перед продолжением работы с оставшейся частью сценария.

Я не буду приводить ваш код в качестве прямого примера, но в принципе:

// do stuff with sheet
// add data

SpreadsheetApp.flush();

// sort data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...