我设计了一个谷歌电子表格,以帮助提高物流的效率。我想通过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 :(得分: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});
}
}
}
}
如果您要查看代码,排序取决于要编辑的第二列。然后,如果仍然是一个消隐的单元格,将检查范围。
只需应用您的其他代码即可实现您的目标,我认为这样可行。
希望这有帮助。