更新不同单元格中的自定义函数

时间:2017-06-21 09:40:29

标签: google-apps-script google-sheets

我有一个带有自定义函数的电子表格,调用这样的Web API:

function myFunction(value) {

  var value = value
  ...

}

我以这种方式在B列的不同单元格中调用此函数:

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

以便值的变化与A列的内容有关。

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

感谢任何帮助,谢谢

2 个答案:

答案 0 :(得分:0)

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

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]);
    }
  }
}

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

enter image description here

答案 1 :(得分:0)

好的,我解决了一个更新单元格的外部脚本,然后我的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)
...

上面发布的具有刷新公式功能的解决方案没有完成工作,我不知道为什么。公式很新鲜,但价值没有得到更新。 非常感谢你的帮助!