我试图确保排序在脚本末尾发生而不添加睡眠功能。遇到问题,最后无法解决。我需要排序才能最后完成,因此工作表有时间完成所有其他功能,否则我将遇到条件格式错误。
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.');
}
答案 0 :(得分:1)
如果您想在运行排序功能之前完成其他工作表操作,则只需要一个flush()
调用即可。
这将用表格清空脚本的命令缓冲区,然后继续执行脚本的其余部分。
我不会引用您的代码作为直接示例,但原则上:
// do stuff with sheet
// add data
SpreadsheetApp.flush();
// sort data