无能 - 超过执行时间

时间:2017-11-21 16:56:50

标签: google-apps-script

我从提供给我使用的表单中获取此代码,但它效率低下并且在完成之前超时。我试图用一种超级简单的格式重写它,以便在限定时间内完成它。这就是我的开始:

    function addTo() {
var ss = SpreadsheetApp.getActiveSheet();
// Style 1
  // Size 2
  var num1 = ss.getRange("AL2").getValue();
  var num2 = ss.getRange("O2").getValue();
  ss.getRange("O2").setValue(num1+num2);
  ss.getRange("AL2").clearContent();
  // Size 4  
  var num1 = ss.getRange("AM2").getValue();
  var num2 = ss.getRange("P2").getValue();
  ss.getRange("P2").setValue(num1+num2);
  ss.getRange("AM2").clearContent();

然后重复约200次。有人建议将处理作为范围。这是有道理的,应该导致更快的过程。但是我在编写它时遇到了麻烦。这就是我到目前为止所做的事情(虽然它不起作用):

function addallatOnce() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var startrange = ss.getRange("Inventory Received!B2:U48");
  var addrange =  ss.getRange("Inventory Received!Y2:AR48");
  var complete = startrange+addrange
  ss.getRange("Inventory Received!B50:U96").setValues(complete);
}

我通常不会编写代码,我可以理解我正在阅读的内容,但我对编写它并不了解。非常感谢帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

使用Google Script

Google在优化代码方面有一些excellent documentation。在这种情况下,您可以使用数组执行批处理操作。首先使用范围上的getValues()函数将电子表格数据提供给数组。请注意,getValues()返回范围内值的2D数组。循环遍历所有值并将它们按值一起添加。然后为所需范围指定完整数组的值。

function addallatOnce() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var startrange = ss.getRange("Inventory Received!B2:U48").getValues();
  var addrange =  ss.getRange("Inventory Received!Y2:AR48").getValues();
  var complete = addrange;
  var row = 0;
  var col = 0;
  for (row = 0; row < complete.length; row++) {
    for (col = 0; col < complete[0].length; col++) {
      complete[row][col] = addrange[row][col] + startrange[row][col];
    }
  }
  ss.getRange("Inventory Received!B50:U96").setValues(complete);
}

没有Google Script

将以下公式放入已收到库存的单元格B50中:

=ARRAYFORMULA(B2:U48+Y2:AR48)

请参阅文档here