4

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

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

这是我的脚本。如果单词很少:对于给定的 '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 的值。

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

亚历克西斯

4

1 回答 1

7

问题在于自定义函数的缓存“功能”。我在另一个线程中解释它,请阅读。

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

//getting values like this is wrong (for a custom function)
var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
于 2012-05-10T21:07:17.353 回答