2017-08-26 69 views
0

我设计了一个谷歌电子表格来帮助提高物流效率。我希望通过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"); 
 
    
 
} 
 
}**

回答

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

如果你看看代码,排序取决于第二要编辑的列。然后,检查范围是否仍然是空白单元格。

只需应用您的其他代码来实现您的目标,我认为这将工作。

希望这会有所帮助。