2017-08-26 113 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

如果你看看代碼,排序取決於第二要編輯的列。然後,檢查範圍是否仍然是空白單元格。

只需應用您的其他代碼來實現您的目標,我認爲這將工作。

希望這會有所幫助。