为什么我的排序脚本工作不一致?

Why is my Sorting script works inconsistently?

嗨,有帮助的贡献者,

我有一个响应 google sheet,它有一组数据范围,其中包含不同类型的数据值(屏幕截图),如下所示。 Col2 时间戳值是在用户在 gform 中输入时自动生成的。我将其移动为 col2(默认为 col1),因为我想将报价 ID 作为主键 col。报价 ID 值是根据提交 gform 时触发的 google 脚本自动生成的:-
排序不一致

的响应sheet

我原以为我们会让数据范围按时间戳自动排序(我非常需要它按时间戳排序)但这与我的情况不一致。我已经尝试了以下代码,但仍然无法始终如一地工作。但是,当我使用功能过滤器在 sheet 中手动对其进行排序以选择时间戳列,然后对 A->Z 进行排序时,它工作正常。但这对我的要求无效

方法一:

// this resulted as in the screenshot.

SortRange = "A2:AC";
SortOrder = [{column:2, ascending: true}];
function multiSortColumns(){
  var range = msheet.getRange(SortRange);
  range.sort(SortOrder);
}

方法二:

// some sorted, some not but still wrong and not ascending order.

SortRange = 2,1,sheet.getLastRow() - 1, sheet.getLastColumn();
SortOrder = [{column:2, ascending: true}];
function multiSortColumns(){
   var range = sheet.getRange(SortRange);
   range.sort(SortOrder);
}

方法三

var sheet=SpreadsheetApp.getActiveSheet().sort(2);
// this doesn't sort by specific column we want and it includes sorting the header.

请帮助更正我的代码。提前TQVM.

潜在问题:

  • 你问题中的前两个方法似乎没有定义 sheet object.

  • 另外我什至不确定你是否执行 multiSortColumns 完全没有。

  • 第三种方法也会对 header 进行排序。

  • 另一个潜在的问题是使用时:

    const sheet = ss.getActiveSheet();
    

    后者认为活动的sheet可以是传播sheet文件中的任何selectedsheet。

相反,我建议您使用:

const sheet = ss.getSheetByName("Form Responses 1");

假设您要排序的 sheet 的名称是 Form Responses 1


解决方案:

这是您第二种方法的修改版本,它确保在您执行 myFunction():

时执行所有内容
function myFunction() {
  const ss = SpreadsheetApp.getActive();
  // const sheet = ss.getActiveSheet(); // not recommended
  const sheet = ss.getSheetByName("Form Responses 1"); // recommended
  sheet.getRange(2, 1, sheet.getLastRow() -1, sheet.getLastColumn()).sort({column: 2, ascending: true});   
}