如何将自动排序的空白行发送到底部?

时间:2019-05-23 15:26:59

标签: sorting google-apps-script

我有一个脚本,该脚本在编辑时对B列进行排序,但是有两个问题。

1-将带有值的行发送到工作表的底部。

2-数字无法正确排序。它们应该以1,3、4、5和20的顺序排列,但是在对其进行排序时,它们将其排序为1、20、3、4、5。这就像它只能识别20中的2并将其放置在1.之后

我在各个论坛中进行搜索,试图找出运气,所以将不胜感激。

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("050")
  var range = sheet.getRange("A6:L200");

 // Sorts by the values in column 2 (B)
 range.sort({column: 2, ascending: true});

}

我不知道这是否有所不同,但是正在排序的工作表使用VLOOKUP。 B上的每个列都使用VLOOKUP。

=IFERROR(VLOOKUP(A6,data2019,3,FALSE),"")

1 个答案:

答案 0 :(得分:0)

首先,无需首先获取空白值,而可以使用getDataRange()仅获取需要排序的范围。

一旦定义了范围,就可以对其进行排序。您的值未正确排序(这可能是由于VLOOKUP中单元格的格式所致)。您可以简单地使用setNumberFormat('0')将数据范围的格式设置为数字格式,然后按期望的顺序对数据进行排序。

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("050");
  var range = sheet.getDataRange();
  var numRows = range.getNumRows();

  //sets the formatting of column B to a number in all populated rows
  sheet.getRange(1, 2, numRows).setNumberFormat('0');

  //sorts range by column B using newly formatted values
  range.sort({column: 2, ascending: true});
}