首页 > 解决方案 > Google 表格 – 在多个工作表的特定范围内自动排序 2 列

问题描述

我一直在寻找一种在 Google Sheet 上编写自动排序脚本的方法,该方法执行以下操作:

我尝试了以下代码,但它无法正常工作:

   function onEdit(event) {
      var postDate = 1;
      var postTime = 2;
    
      var sheet = event.source.getActiveSheet();
      var tableRange = "A35:I911";
      var range = sheet.getRange(tableRange);
    
      range.sort([
        {column: postDate, ascending: true},
        {column: postTime, ascending: true}
      ]);
    }

先感谢您!

以下是 Google 表格修订版的链接:https ://docs.google.com/spreadsheets/d/1NUy6aY-lEA66UFXg4Yx4mXsTgFvj5g2Dhv4jToYsQnw/edit?usp=sharing )

标签: google-apps-scriptgoogle-sheets

解决方案


修改点:

  • 尽管从您的问题来看,不幸的是,我无法理解but it will not work properly,当我看到您的示例电子表格时,似乎“2021 年 3 月”表中的最大行数为 910。我认为这可能是您的问题的原因。
  • 当您想在编辑单元格“A35:I911”时运行脚本时,在您的情况下,我认为在编辑单元格“A35:B911”时,运行脚本可能是合适的。因为即使在编辑单元格“C35:I911”时,也不会运行排序。
  • 而且,从您的示例脚本中,我认为您可能不想在编辑“概览”表时运行该脚本。

当以上几点反映到您的脚本时,它变成如下。

修改后的脚本:

function onEdit(event) {
  var range = event.range;
  var sheet = event.source.getActiveSheet();
  if (sheet.getSheetName() == "Overview" || range.rowStart < 35 || range.rowStart >= 911 || range.columnStart > 2) return;
  var postDate = 1;
  var postTime = 2;
  var tableRange = sheet.getMaxRows() < 911 ? "A35:I" + sheet.getLastRow() : "A35:I911";
  var range = sheet.getRange(tableRange);
  range.sort([
    {column: postDate, ascending: true},
    {column: postTime, ascending: true}
  ]);
}
  • 当您要运行脚本时,请编辑工作表中除“概述”之外的单元格“A35:I911”。
  • 当要运行脚本时单元格“A35:I911”,请修改range.columnStart > 9.

参考:


推荐阅读