【问题标题】:google app script + caching or running script once a day谷歌应用脚​​本+缓存或每天运行一次脚本
【发布时间】:2012-09-22 08:40:30
【问题描述】:

我在一个脚本中有一个函数(比方说叫做 f1),它需要很长时间才能运行(在电子表格中,它使用 setformula transpose importrange 和 query.. 大约需要 2 分钟才能运行)。

F1 用于合并 2 个电子表格,并使用 setformula() 在第二个电子表格的某些列中设置结果。

我安排此函数在夜间运行(使用触发器),但每次有人打开它时,该函数都会重新运行(处理相同的数据)。 我尝试放置一个 void onload() 函数,但即使我没有调用它,f1 也会运行。

有没有办法每天运行一次函数,而不是在人们打开电子表格时运行?
有没有办法将结果缓存一整天..直到函数重新按计划运行?
或者有没有办法将整个电子表格的值(不是单元格中包含的公式)复制到另一个电子表格(我在文档中没有找到)?
或者,还有其他解决方法吗?

感谢帮助

洛伊克

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    如果您的函数作为公式调用,则每次有人打开电子表格时都会重新计算它,在某些其他情况下也会重新计算。

    按照您的建议,您可以做的是缓存数据并立即返回缓存的数据。这些线上的东西。

    var ONE_DAY = 24 * 60 * 60 * 1000;
    
    function f1(parameters, force){
      var returnVal = CacheService.getPrivateCache().get('somevariablename'); 
      if (force == true || returnVal == null) {
        /* Do your long drawn calculation here */
        CacheService.getPrivateCache.put('somevariablename, value, ONE_DAY);
      }
      else {
        return returnVal;
      }
    }
    

    并在电子表格中将您的函数称为

      =f1(parameters, false)
    

    【讨论】:

    • 我在 parameters 参数和 somevariablename 中放了什么?..什么都没有?函数中不使用参数参数!
    • 顾名思义,使用任何变量名。如果你不使用参数,就去掉它。
    • 我知道这是一个较旧的问题/答案,但正如这里提到的,*,任何东西可以存储在缓存中的最长时间是 6 小时(21600 秒)
    最近更新 更多