Google表格脚本 - 排序速度极慢

时间:2017-07-10 02:31:23

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

我认为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);
}

1 个答案:

答案 0 :(得分:1)

执行涉及大量单元格的任何操作(例如,在您的示例中为100 * 25)以及每次编辑到工作表中将会对性能产生重大影响。 Google表格倾向于排队数据操作以减少服务器负载,因此花费大量时间等待绿灯。 Google只为Sheets / Script用户提供了如此强大的计算能力。

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

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