如何按字母顺序和数字顺序对列进行排序

时间:2017-05-03 01:15:52

标签: sorting google-apps-script google-apps google-sheets-api

所以我一直在尝试创建一个谷歌应用程序脚本,这将允许我简单地按顺序排列A2和A2,首先按字母顺序排序,然后按字母顺序排序。我想最终的结果,例如,排序:A2,B5,H1,A3,A1,B4,B2。成为:A1,A2,A3,B2,B4,B5,H1等

所以目前我的代码如下所示:

    function onOpen(){
    var ui = SpreadsheetApp.getUi();
    ui.createMenu('Order Adresses')
    .addItem('Order', 'orderNumber')
    .addToUi();
}

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

  var columnToSortBy = 1;
  var tableRange = "A2:A500"; // What to sort.

  if(editedCell.getColumn() == columnToSortBy){   
    var range = sheet.getRange(tableRange);
    range.sort( { column : columnToSortBy, ascending: true } );
  }
}

此代码允许我按字母或数字对列进行排序。但不是两个。例如,它会按字母顺序对其进行排序,然后按1,10,11,12,2,3,4等顺序列出以下数字。

1 个答案:

答案 0 :(得分:1)

问题是排序实际上是如何运作的。从本质上讲,您将始终对字符串进行排序,并对其自身的每个符号进行排序。因此,如果您有A1,B4,B10,排序算法将查看A,B和B,因此它将A1置于顶部。然后它会看B4和B1,在这种情况下B1赢了,我们已经得到了B10,B4。

您需要重新排序算法以满足您的需求。如果允许的唯一格式是1个字母,然后是任意数量的数字,那么它相对容易。首先,您需要使用.getValues()来获取数据数组。只需在第一个位置之后拆分字符串,您就会在两列中找到字母和整数。

现在只需先按字母排序一个二维数组然后按数字排序。完成后,将带有数字的字符串和.setValues()加回到表格中。