输入整行数据后自动对多列进行排序

时间:2017-08-26 14:32:55

标签: javascript c++ sorting computer-science google-sheets-api

我设计了一个谷歌电子表格,以帮助提高物流的效率。我想通过2个不同的列自动对数据进行排序,以便在输入整行数据后优先考虑需要首先接收的关键部分。我遇到的问题是,一旦您输入我要调用的列之一,数据就会排序,但我要排序的列不是需要输入的那一行数据的最后一列。我试图使用if语句不执行排序,直到输入最后一列,否则抛出一个错误语句,说明您必须在此列中输入数据才能继续。从逻辑上讲,代码对我来说很有意义,但我对计算机语言只有充分的理解。我在第10行中一直收到错误,指出未找到范围。我相信我的错误是尝试调用最后一列的语法。任何帮助将不胜感激



**function autosort(){
 
 // Variable Declaration
 var sheet = SpreadsheetApp.getActiveSpreadsheet();
 
 var NewsheetName = SpreadsheetApp.getActiveSheet().getName();
 
 var sheetName = sheet.getSheetByName(NewsheetName);
 var lastCol = sheetName.getLastColumn();
 var lastColBlank = SpreadsheetApp.getActiveSheet().getRange(lastCol).isBlank()
 // Find range to sort
 var range = sheetName.getRange("A2:G");
 // Sorting algorithm
 if (lastColBlank == false ){
 range.sort([6,5]);
 
 }
 
 else {
 throw ("error: If trailer # is unavailable, please enter N/A");
 
 }
}**




1 个答案:

答案 0 :(得分:0)

试试这段代码:

function onEdit() {

 var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var editedCell = sh.getActiveRange().getColumnIndex();

  if(editedCell == 2) { 
    var range = sh.getRange("A2:B10");
    var blank = range.isBlank()

    var values = range.getValues();
    Logger.log(values)
    for (var i = 0; i<values.length; i++) {
    //values.length returns 11 for eleven items
    // values[10][0] would be the 11th row 1st column
      Logger.log(values[i][1])
    if (values[i][0] ==  "" || values[i][1] ==  "") {
      //throw new Error("error: If trailer # is unavailable, please enter N/A");
      var ui = SpreadsheetApp.getUi();
      var response = ui.alert('If trailer # is unavailable, please enter N/A');
    }else{
      range.sort({column: 2});
    }
  }

  }
}

enter image description here

如果您要查看代码,排序取决于要编辑的第二列。然后,如果仍然是一个消隐的单元格,将检查范围。

只需应用您的其他代码即可实现您的目标,我认为这样可行。

希望这有帮助。