【问题标题】:Google Sheets script - sort extremely slow谷歌表格脚本 - 排序非常慢
【发布时间】:2023-04-06 09:07:01
【问题描述】:

我在 Google 表格中有我认为相当简单/简单的代码,可以根据我所在的文件进行一些自动排序。代码有效,但最多需要 一半一分钟 执行。有什么办法可以优化吗?

代码如下:

function autoSort(sheet) {
  var data = {};

  var sortMap = {
    "*** Artwork ***": {
      tableRange: "A5:R100",
      sortCriteria: [
        {column: 12, ascending: true},
        {column: 5, ascending: true}
      ]
    },
    "*** Artists ***": {
      tableRange: "A3:Z102",
      sortCriteria: [
        {column: 2, ascending: true}
      ]
    }
  };

  if (data = sortMap[sheet.getName()]) {
      sheet.getRange(data.tableRange).sort(data.sortCriteria);
  }
}

function onEdit(e) {
  var activeSheet = e.source.getActiveSheet();
  autoSort(activeSheet);
}

【问题讨论】:

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


    【解决方案1】:

    执行任何涉及大量单元格(例如您的示例中的 100 * 25)的操作,每次编辑工作表都会严重拖累性能。 Google 表格倾向于将数据操作排队以减少其服务器负载,因此大部分时间都花在等待绿灯上。谷歌只为表格/脚本用户提供这么多的计算能力。

    我在这里看到的唯一优化是检查是否对您排序的列进行了编辑。

    function onEdit(e) {
      var activeSheet = e.source.getActiveSheet();
      var activeRange = e.Range;
      if ([2, 5, 12].indexOf(activeRange.columnStart) != -1) {
        autosort(activeSheet);
      }
    }
    

    如果您排序的范围是所有编辑发生的地方,这将无济于事。

    更好的方法是放弃在编辑时对事物进行排序的想法,并为此向用户提供custom menu item

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多