如何优化这个Javascript函数 Function\u Dataset\u A\u D(){ var ss=电子表格应用程序openById(“xxx”); var source=ss.getSheetByName(“值”); var lrS=source.getLastRow(); var rangeSourceA=source.getRange(2,1,lrS,4); var catA=rangeSourceA.getValues(); var target=ss.getSheetByName(“数据集”); target.getRange(“A2:D”).clearContent(); 对于(i=0;i

如何优化这个Javascript函数 Function\u Dataset\u A\u D(){ var ss=电子表格应用程序openById(“xxx”); var source=ss.getSheetByName(“值”); var lrS=source.getLastRow(); var rangeSourceA=source.getRange(2,1,lrS,4); var catA=rangeSourceA.getValues(); var target=ss.getSheetByName(“数据集”); target.getRange(“A2:D”).clearContent(); 对于(i=0;i,javascript,google-apps-script,Javascript,Google Apps Script,我希望优化此代码以在更短的时间内运行。我认为循环部分是主要问题。我相信您的目标如下 您希望降低脚本的处理成本 修改点: 在本例中,我建议将catA的值放入一个数组中30次。然后,将数组放入电子表格中。这样,我认为工艺成本可能会降低 顺便说一下,在脚本中,var rangeSourceA=source.getRange(2,1,lrS,4)被使用。在这种情况下,将空行添加到最后一行的下一个rof 当上述各点反映到脚本中时,它将变成如下所示 修改脚本: function\u Dataset\

我希望优化此代码以在更短的时间内运行。我认为循环部分是主要问题。

我相信您的目标如下

  • 您希望降低脚本的处理成本
修改点:
  • 在本例中,我建议将
    catA
    的值放入一个数组中30次。然后,将数组放入电子表格中。这样,我认为工艺成本可能会降低
  • 顺便说一下,在脚本中,
    var rangeSourceA=source.getRange(2,1,lrS,4)被使用。在这种情况下,将空行添加到最后一行的下一个rof
当上述各点反映到脚本中时,它将变成如下所示

修改脚本:
function\u Dataset\u A\u D(){
var ss=电子表格应用程序openById(“xxx”);
var source=ss.getSheetByName(“值”);
var lrS=source.getLastRow();
var rangeSourceA=source.getRange(2,1,lrS-1,4);//修改
var catA=rangeSourceA.getValues();
var target=ss.getSheetByName(“数据集”);
target.getRange(“A2:D”).clearContent();
//我修改了下面的脚本。
var-ar=[];
对于(i=0;i<30;i++){
ar=ar.concat(catA);
}
target.getRange(1,1,ar.length,ar[0].length).setValues(ar);
}
参考资料:

谷歌应用程序脚本不可用javascript@KrzysztofKrzeszewski虽然GAS是基于JavaScript构建的,但大多数情况下优化都与JavaScript相关。请参阅下面的解决方案,您可以将值存储在数组中,并使用该数组而不是单独使用每个值。这可以使用JavaScript实现。虽然我同意标题应该是GAS函数而不是JavaScript。不过,解决方案离当前标题不远。:)
Function_Dataset_A_D() {
    var ss = SpreadsheetApp.openById("xxx");
    var source = ss.getSheetByName("value");
    var lrS = source.getLastRow();
    var rangeSourceA = source.getRange(2,1,lrS,4);
    var catA = rangeSourceA.getValues();
    var target = ss.getSheetByName("dataset");
    target.getRange("A2:D").clearContent();
    for (i = 0; i < 30; i++){
        var avals = target.getRange("C1:C").getValues().filter(String).length+1;
        target.getRange(avals, 1, catA.length, catA[0].length).setValues(catA);
    }
};
function Function_Dataset_A_D() {
  var ss = SpreadsheetApp.openById("xxx");
  var source = ss.getSheetByName("value");
  var lrS = source.getLastRow();
  var rangeSourceA = source.getRange(2,1,lrS - 1,4);  // Modified
  var catA = rangeSourceA.getValues();
  var target = ss.getSheetByName("dataset");
  target.getRange("A2:D").clearContent();
  
  // I modified below script.
  var ar = [];
  for(i=0; i < 30; i++){
    ar = ar.concat(catA);
  }
  target.getRange(1, 1, ar.length, ar[0].length).setValues(ar);
}