【问题标题】:Update custom function in different cells更新不同单元格中的自定义函数
【发布时间】:2017-06-21 09:40:28
【问题描述】:

我有一个电子表格,其中包含一个调用 Web API 的自定义函数,如下所示:

function myFunction(value) {

  var value = value
  ...

}

我在B列的不同单元格中这样调用这个函数:

=myFunction(A2)
=myFunction(A3)
=myFunction(A4)
...

因此值会根据 A 列的内容发生变化。

现在,我想用触发器更新所有这些函数,触发器可以是每分钟、每小时或午夜。我在 Google Apps 脚本界面上使用了内置触发器,就像我过去使用外部脚本所做的那样,但它不起作用(我认为是因为触发器调用了没有“值”变量的函数)。 我正在考虑添加一个外部触发脚本来更新另一个单元格的值(假设“C1”),然后使用 onEdit 函数来更新自定义函数。我搜索了很多关于 onEdit 的内容,但我真的不明白如何使它适用于我的情况。 onEdit 函数是否应该调用 myFunction?以什么方式?

感谢您的帮助,谢谢

【问题讨论】:

  • 这不适用于自定义函数;他们不会重新计算,因为他们的输入没有改变,并且他们基本上假设他们是确定性的。您可以让他们采用一个虚拟参数,该参数是一个带有随机数的单元格,您的计划触发器将填充该参数,然后强制自定义函数重新计算。
  • 好的,谢谢。我以这种方式更改了函数:function myFunction(value, now) { var value = value var now = data.getRange('a1').getValue(); //a cell with =now() formula ... } 我应该在包含自定义函数的每个单元格中调用“now”参数吗?

标签: google-apps-script google-sheets


【解决方案1】:

您可以使用此功能刷新列中的公式:

function updateColumnBFormulas()
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('test');
  var range = sheet.getRange(1, 2, sheet.getLastRow(), 1);

  // get all formulas
  var formulas = range.getFormulas();

  for (var i = 0; i < formulas.length; i++)
  {
    // if there's formula in a cell
    if (formulas[i][0])
    {
      // refresh it
      sheet.getRange(i+1, 2).setFormula(formulas[i][0]);
    }
  }
}

然后将触发器设置为每分钟运行一次(编辑 - 当前项目的触发器):

【讨论】:

    【解决方案2】:

    好的,我使用更新单元格的外部脚本解决了问题,然后在我的 custon 函数中使用了一个虚拟参数来引用该单元格(如 @RobinGertenbach 所建议的那样) 这是外部触发的脚本:

    function update() {
    
      var number = Math.floor(new Date().getTime()/1000);
      ss.getSheetByName("Data").getRange("A1").setValue(number);
    
    }
    

    我的自定义函数现在看起来像:

    function myFunction(value, now) {
    
       var value = value 
       var now = now
       ...
    
     }
    

    然后在B列这样调用:

    =myFunction(A2, $A$1)
    =myFunction(A3, $A$1)
    =myFunction(A4, $A$1)
    ...
    

    上面发布的具有刷新公式的功能的解决方案不起作用,我不知道为什么。公式令人耳目一新,但值没有更新。 非常感谢您的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-12
      • 2016-02-04
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      相关资源
      最近更新 更多