4

我进行了长时间的搜索和大量的代码试验,但找不到我要找的东西。也许有人在那里可以提供帮助?

我在单元格 A1 中有一个带有复杂公式的 Google 电子表格。有时,当公式计算结果时,单元格会说“正在思考...”几秒钟。

我有一个脚本“myFunction()”,它取决于单元格 A1 中的值。如果单元格显示“正在思考...”,它将无法正常运行,因此我试图创建另一个脚本,等待公式完成“思考”,然后执行 myFunction()。

这是我到目前为止所拥有的:

function waitMyFunction () {      

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName('Sheet1');

    var range = s.getRange('A1:A1')  // range where I want to make sure 'Thinking' is done  
    var values = range.getValues();
    var string = values.toString();

    var loading = "Thinking...";

      while (string.search(loading) ==! 0); {
      (Utilities.sleep(10000));  // Wait for 10 seconds
}       
  myFunction();
};

问题是,无论单元格 A1 中的值是什么,脚本似乎都会等待 10 秒。即使公式不是“思考”,它也会等待。我需要这个脚本快速运行,我可以忍受它需要 10 秒,这是公式思考的奇数时间,但不是每次都!

谁能指出我正确的方向?我花了几个小时试图解决这个问题。如果有人有任何想法,我们将非常感谢您的帮助。

非常感谢您的关注。

4

2 回答 2

0

看起来与以下内容相同:Google SpreadSheets - 在代码中使用时间触发器时,某些单元格获取“#N/A”值

旁注,我怀疑您还想删除“;”

while (string.search(loading) ==! 0)  ;
                                      ^
于 2013-10-23T05:37:44.627 回答
0

“加载”只被评估一次。如果一开始是“Thinking ...”,那么在while 语句中总是这样。因此,您每次都需要获取单元格的值(不是值)。您可能想通过 JavaScript 语法检查 while 和 not-equals http://www.w3schools.com/js/js_comparisons.asp 如果您希望它运行得更快,那么减少时间延迟/更频繁地测试。

于 2013-01-30T18:25:15.620 回答