Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌表单中的自定义排序顺序_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 谷歌表单中的自定义排序顺序

Javascript 谷歌表单中的自定义排序顺序,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我试图在GoogleSheets电子表格中根据单个列中的值并使用自定义排序顺序对一系列数据进行排序。我可以对数据进行排序,但我不知道如何设置排序的优先级(按字母顺序或逆字母顺序除外)。我想根据下面所示的顺序进行排序,但显然我现在所做的只是按字母顺序排序。非常感谢您的帮助 function onEdit() { var sheet = SpreadsheetApp.getActiveSheet(); var editedCell = sheet.getActiveCell();

我试图在GoogleSheets电子表格中根据单个列中的值并使用自定义排序顺序对一系列数据进行排序。我可以对数据进行排序,但我不知道如何设置排序的优先级(按字母顺序或逆字母顺序除外)。我想根据下面所示的顺序进行排序,但显然我现在所做的只是按字母顺序排序。非常感谢您的帮助

  function onEdit() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var editedCell = sheet.getActiveCell();

  //sort based on priority
    var columnToSortBy = 4;
    var tableRange = "A2:Q1000";
    var SortOrder = [
      {name: "Urgent", value:1},
      {name: "High Priority", value:2},
      {name: "Moderate Priority", value:3},
      {name: "No deadline", value:4},
      {name: "Complete", value:5}
    ];

    if(editedCell.getColumn() == columnToSortBy){   
      var range = sheet.getRange(tableRange);
      range.sort( { column : columnToSortBy } );  //this needs to be sorted based on priority level, not 
    }
  }

GAS文档似乎没有引用自定义排序顺序。您可以从范围中获取值,通过将自定义比较器函数传递给Array.prototype的“sort”方法对它们进行排序,最后用排序后的数组覆盖范围

下面的示例假设第一张工作表中有一列需要根据“sortBy”对象设置的优先级进行排序

var sheet = SpreadsheetApp.getActive().getSheets()[0];

  var range = sheet.getRange(1, 1, sheet.getLastRow(), 1);
  var values = range.getValues();

  var sortBy = {  
    "a": 2,
    "b": 0,
    "c": 4,
    "d": 1,
    "e": 3 
  };

 values.sort(function(a, b){   
   return sortBy[[a][0]] - sortBy[[b][0]];
  });


 range.setValues(values);
这将按升序排序-要颠倒顺序,请更改comparator函数以从下一个元素中减去当前元素的优先级

 return sortBy[[b][0]] - sortBy[[a][0]];

这两种解决方案都无法根据需要工作,因此我最终将数字作为前缀添加到名称中,并让它们根据数字进行排序。