【问题标题】:Google Spreadsheet Script to run AFTER formula in cell has finished "Thinking..."在单元格中的公式完成“思考...”后运行的 Google 电子表格脚本
【发布时间】:2013-01-30 04:26:43
【问题描述】:

我进行了长时间的搜索并尝试了很多代码,但找不到我要找的东西。也许有人可以帮忙?

我在单元格 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 秒的时间,但不是每次都在计算公式!

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

非常感谢您的关注。

【问题讨论】:

  • 我不想构建一个复杂的函数来测试它,但是只有在 Thinking... 完成后才会调用 onEdit 吗?如果确实如此,那么您可以利用它来发挥自己的优势吗?
  • @Jonathon,我同意。我的直觉是,只有在公式完成后才会调用 onEdit。因此,请考虑将任何脚本绑定到 onEdit 事件,或者将其写入名为 onEdit() 的函数中。

标签: google-apps-script google-sheets google-docs formula google-drive-api


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    看起来与:Google SpreadSheets - When using a time trigger in code, some cells getting '#N/A' value

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

    while (string.search(loading) ==! 0)  ;
                                          ^
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      相关资源
      最近更新 更多