Apps脚本极其缓慢或无休止地“正在准备执行...”

时间:2018-12-05 11:52:35

标签: javascript performance google-apps-script google-sheets execution

我在Google表格文件中写了一个非常简单的代码。目的是:

  1. 从StaticSheet(所有Copyxxx)中保存一些需要在DynamicSheet中复制的单元格值。
  2. 获取用户手动插入的一个特定单元格的值。
  3. 输入一个While循环,该循环仅用于增加指示符并获取要在其中复制那些先前保存的值的行号。
  4. 将这些值复制到此行但不同的列上。

问题在于,似乎大多数情况下,在我告诉脚本运行脚本后,它甚至都没有运行。 有趣的是,有时它会运行得非常慢,但会持续几分钟。然后它再次停止工作。

能告诉我我在这里想念什么吗?

function Copy_Static_on_Dynamic() {
  var app = SpreadsheetApp;
  var ss = app.openById("xxxxyy--------yyzzzz")
  var StaticSheet = ss.getSheetByName("DEAT Price");
  var DynamicSheet = ss.getSheetByName("DEAT Price + TEST");
  var CopySKU = StaticSheet.getRange(5,1,40);
  var CopyPrices = StaticSheet.getRange(5,3,40,4);
  var CopyUsage = StaticSheet.getRange(5,8,40);
  var Week_1 = StaticSheet.getRange(2,4).getValues();
  var i = 1;
  Logger.clear();
  while(DynamicSheet.getRange(i,3).getValues() != Week_1)
  {
   Logger.log(i);
    i+=1;
  }
  CopySKU.copyTo(DynamicSheet.getRange(i,4,40));
  CopyPrices.copyTo(DynamicSheet.getRange(i,6,40,4));
  CopyUsage.copyTo(DynamicSheet.getRange(i,11,40));
}

3 个答案:

答案 0 :(得分:0)

如果在Apps脚本编辑器中看到“正在准备执行”消息,则可以重新加载浏览器窗口并再次运行该功能。该程序可能会消失。

答案 1 :(得分:0)

如阿米特·阿加瓦尔(Amit Agarwal)所述,要解决问题中提到的错误消息,请刷新Web浏览器标签。

关于代码,

var Week_1 = StaticSheet.getRange(2,4).getValues();

DynamicSheet.getRange(i,3).getValues()

您应该使用getValue而不是getValue,因为您的代码是指单个单元格单元格,否则您将获取2D数组而不是标量值。

使用while时应格外小心,以免功能无限运行。您可以添加如下的“保障措施”

var max_iterations = 100 // Edit this while(DynamicSheet.getRange(i,3).getValue() != Week_1 && i <= max_iterations) {

答案 2 :(得分:0)

所以我想我已经解决了。 正如Serge insas所说的那样,我的脚本在后台运行,我在“执行”部分找到了该脚本,您也可以在其中中断它们。 发现它之后,我继续进行测试,然后发现while循环每次需要近2秒钟来检查条件,这使得脚本非常长。 所以代替:

while(DynamicSheet.getRange(i,3).getValues() != Week_1)

...我创建了一个先前声明的变量,例如:

var WeekLOOP = DynamicSheet.getRange(i,3).getValues();
while(WeekLOOP != Week_1) { --- }

...,现在脚本需要几毫秒来运行条件。我没有足够的技术知识来说明这是否是唯一的问题,但是显然可以解决我的问题。 感谢大家的支持!如果我需要其他帮助,会回来的:)