带有自定义脚本的公式不会在 Google 电子表格中更新

Posted

技术标签:

【中文标题】带有自定义脚本的公式不会在 Google 电子表格中更新【英文标题】:Formula with custom script doesn't update in Google Spreadsheet 【发布时间】:2012-05-10 12:50:16 【问题描述】:

我在使用电子表格时遇到了一些问题:如标题中所述,我在一列中放入了一个公式,该公式根据另一个单元格的值调用自定义脚本,但是当我修改另一个单元格时,公式没有更新...这似乎适用于标准公式,但是,在我的单元格中调用我的脚本:

如果我尝试在公式单元格中添加空白,结果仍然没有更新。 如果我清除公式单元格,然后重新键入公式,它仍然显示旧值。 如果我将公式单元格复制粘贴到另一个单元格中,则新单元格是最新的。

这是我的脚本。如果字数不多:对于给定的 'company' 参数,它会搜索所有符合此条件的行并将第三列单元格存储在一个变量中,最后返回(所以返回最后一个值):

function getLastStatut(company) 
  var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();

  var out = "not found";
  var row;
  for(i in values)
    row = values[i];
    if(row[1]==company)
      out = row[2];
    
  
  return out;

例如:

A1:日期 A2:测试 A3:跑步 A4:=getLastStatut(B1)

所以 A4 显示“正在运行”,但如果我更改 A3,它仍然显示“正在运行”,而它应该显示 A3 的值。

这是一个错误还是我做错了什么?欢迎任何帮助。

亚历克西斯

【问题讨论】:

【参考方案1】:

问题在于自定义函数的缓存“功能”。我在这个other thread中解释了,请阅读。

但是这里的底线是,自定义函数不应该访问非静态数据,所有变量信息都应该作为参数传递。在您的情况下,整个数据集应该是您脚本的参数。自定义函数根本不应该得到任何范围。

//getting values like this is wrong (for a custom function)
var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();

【讨论】:

感谢 Henrique,很遗憾我没有找到您提供的链接。我终于将我的函数定义更改为:'function getLastStatus(company,values)' 并以这种方式调用它'=getLastStatut(B19,A:C)',因为我只需要解析前三列。 有时很难想出一个好的搜索条件。特别是当我们不确定问题是什么时:)

以上是关于带有自定义脚本的公式不会在 Google 电子表格中更新的主要内容,如果未能解决你的问题,请参考以下文章

自动填充公式(跨电子表格运行) - Google 表格/应用程序脚本

Google 表格脚本:带有 HTML 表格的电子邮件,该表格只有一组

带有 VLOOKUP 的 Google 电子表格多个结果

使用 Apps 脚本在带有日期的 Google 电子表格中存档

识别修改 Google 表格的外部应用程序脚本

关于如何使用从其电子表格的html表单接收的数据创建pdf并通过电子邮件发送pdf文件的Google应用程序脚本