加速电子表格的脚本(GAS-Google App脚本和Google表格)

我的脚本很长,并且总结了我在脚本中多次使用的命令,这些命令是以下类型:

class Solution {
    public int[] diStringMatch(String S) {
        int n=S.length();
        int low=0;
        int high=n;
        int[] a= new int[n+1];
            for(int i=0; i<S.length(); i++){
                if(S.charAt(i)=='I'){
                    a[i]=low++;

                }
                else{
                    a[i]=high--;

                }

            }
           a[n]=low;
                 return a;
    }

}

我想知道如何加快这些过程的速度,因为我学会了用Macro创建大多数东西,最后我还玩脚本,我知道不需要使用它们,但是我有一点点难以调整和删除不必要的东西。

pqlay 回答:加速电子表格的脚本(GAS-Google App脚本和Google表格)

看看Best Practices,尤其是有关最小化对其他服务的调用的部分。这是一个过分的简化,但是基本上每次调用电子表格服务方法(.doSomething())时,都会降低脚本速度。

  var ss = SpreadsheetApp.getActive();

  ss.getRange('Page 1!A1').setFormula('=UNIQUE(H2:H)');
  ss.getRange('Page 3!A1:A').copyTo(ss.getRange('Page 2!P1:P'),SpreadsheetApp.CopyPasteType.PASTE_VALUES,false);
  ss.getRange('Page 3!A1').clear({contentsOnly: true,skipFilteredRows: true}); 

  //----------------------------------------------

  ss.getRange('Page 4!A2:R51').sort({column:8,ascending:false});

改进:

  • SpreadsheetApp.getActive()SpreadsheetApp.getActiveSpreadsheet()相同。只叫它 一次。
  • 无需获取范围然后再激活它。激活基本上仅用于与用户选择进行交互,但这 似乎并不是您所需要的。你做的方式 您调用电子表格服务4次:(1)获取范围, (2)激活范围,(3)获取激活的范围,(4)做某事 到激活的范围。您可以通过简单地将这些电话减半 范围,然后对其执行所需的任何操作。
  • 您要在.getRange('Page 4!A2:R51')调用中指定页面,因此无需进行ss.getSheets()调用。

可能还有许多其他改进,但这可能需要对代码进行完整的重构。这对您来说可能是一个很好的锻炼。如果您查看最佳实践中的batch operations部分,您可能会知道可以提高多少性能(它们的示例代码从70秒缩短到仅1秒)。

本文链接:https://www.f2er.com/3120601.html

大家都在问