【问题标题】:Custom sort order in Google SheetsGoogle 表格中的自定义排序顺序
【发布时间】:2018-01-30 08:11:59
【问题描述】:

我正在尝试根据单列中的值并使用自定义排序顺序对 Google 表格电子表格中的一系列数据进行排序。我能够对数据进行排序,但我不知道如何设置排序的优先级(按字母顺序或反向字母顺序除外)。我想根据下面指示的顺序进行排序,但显然我现在只是按字母顺序进行排序。非常感谢您的帮助!

  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 
    }
  }

【问题讨论】:

  • 无法根据需要使任何一个建议的解决方案发挥作用,因此我最终将数字作为前缀添加到名称中,并让它们根据数字进行排序。

标签: javascript google-apps-script google-sheets


【解决方案1】:

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);

这是升序排序 - 要反转顺序,更改比较器函数以从下一个元素中减去当前元素的优先级。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 2016-05-24
    • 1970-01-01
    相关资源
    最近更新 更多