1

我有一个在电子表格中使用的脚本。它在单元格 B2 中,需要这样的参数=myfunction(A2:A12)。在内部,该函数从大量单元格中获取信息。

似乎没有任何效果。我尝试将其添加到
Scripts > Resources > Current Project Triggers > On edit
Scripts > Resources > Current Project Triggers > On open

如何让此功能在每次文档编辑时更新结果?

4

3 回答 3

1

我有一个类似的问题,对我来说,我想“观察”一个特定的单元格来触发我的功能。

我做了以下事情(假装 A1 是我正在观看的单元格)

IF(LEN(A1) < 1, " ", customFunction() )

如果我曾经编辑过该单元格,则会成功触发。然而:

“自定义函数返回值,但不能在其所在单元格之外设置值。在大多数情况下,单元格 A1 中的自定义函数无法修改单元格 A5。但是,如果自定义函数返回双精度数组,则结果会溢出包含的单元格函数并填充包含自定义函数的单元格下方和右侧的单元格。您可以使用包含 return [[1,2],[3,4]]; 的自定义函数进行测试。来自:https ://developers.google.com/apps-script/execution_custom_functions

这使它几乎没用,但它可能适用于您的情况?

如果将自定义功能分配给项目触发器,则它具有更大的功能,因此我个人最终将其添加到“脚本>资源>当前项目触发器>编辑时”

并且基本上是“观看一列”,所以它只有在当前单元格在“编辑范围”内时才会执行。这有点麻烦,需要一些隐藏的单元格,但它目前对我有用

  var rowIndex = thisspreadsheet.getActiveCell().getRowIndex();
  var colIndex = thisspreadsheet.getActiveCell().getColumn();
  //clamp to custom range
  if(rowIndex < 3 && colIndex != 5)
  {
      return 0; 
  }

  //check against copy
  var name = SpreadsheetApp.getActiveSheet().getRange(rowIndex, 5).getValue();
  var copy = SpreadsheetApp.getActiveSheet().getRange(rowIndex, 6).getValue();
  if(name != copy )
  {
     ///value has been changed, do stuff
     SpreadsheetApp.getActiveSheet().getRange(rowIndex, 6).setValue(name);
  }
于 2013-10-14T16:05:12.883 回答
1

当您在自定义函数(如 getRange 和 getValues 等)中调用 Google Apps 服务时,不幸的是,除了传递您正在“观察”的所有单元格进行编辑之外,无法在每次编辑时更新此类自定义函数.

而且,也许更令人沮丧的是,传递的解决方法是使用公式引用所有“观察”单元格的单个单元格不会触发更新 - 似乎需要直接引用“观察”单元格。

您可以将 GoogleClock() 作为参数传递,它至少每分钟更新一次函数输出。

但是这个论坛上许多成员的建议(他们对这些东西的了解比我多得多)只是:“不要使用自定义函数”。

于 2013-04-05T00:25:36.953 回答
1

我不确定这个确切的代码是否有效,但你可以尝试这样的事情......

function onEdit(event){
  var activeSheet = event.source.getActiveSheet();
  if(activeSheet.getName() == "ActiveSheetName") {
    var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TargetSheetName");
    targetSheet.getRange(2,2).setValue("=myfunction(A2:A12)");
  }
}

假设 B2 单元格在工作表“TargetSheetName”上并假设编辑的单元格在工作表“ActiveSheetName”上,当您编辑任何工作表中的任何单元格时,onEdit 函数将触发。由于有一个 if 语句来检查该编辑的单元格是否在工作表“ActiveSheetName”上,因此只有当编辑的单元格在该工作表上时才会触发,并且它将 B”单元格设置为值 =myfunction(A2:A12),强迫它更新(我猜)。

希望我是正确的,我是有帮助的

于 2013-04-25T18:35:58.163 回答