Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 谷歌应用程序脚本-电子表格运行脚本onEdit?_Google Apps Script_Google Docs_Google Drive Api - Fatal编程技术网

Google apps script 谷歌应用程序脚本-电子表格运行脚本onEdit?

Google apps script 谷歌应用程序脚本-电子表格运行脚本onEdit?,google-apps-script,google-docs,google-drive-api,Google Apps Script,Google Docs,Google Drive Api,我在电子表格中使用了一个脚本。它位于单元格B2,并接受类似于so=myfunction(A2:A12)的参数。在内部,该函数从大量单元格中获取信息 似乎什么都不管用。我尝试将其添加到 脚本>资源>当前项目触发器>编辑时 脚本>资源>当前项目触发器>打开时 如何让此函数在每次文档编辑时更新结果?当您在自定义函数(如getRange和getValues等)中调用Google Apps服务时,很遗憾,除了传递您正在“监视”的所有单元格外,无法在每次编辑时更新此类自定义函数用于编辑 而且,也许更令人沮丧

我在电子表格中使用了一个脚本。它位于单元格B2,并接受类似于so
=myfunction(A2:A12)
的参数。在内部,该函数从大量单元格中获取信息

似乎什么都不管用。我尝试将其添加到
脚本>资源>当前项目触发器>编辑时
脚本>资源>当前项目触发器>打开时


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

当您在自定义函数(如getRange和getValues等)中调用Google Apps服务时,很遗憾,除了传递您正在“监视”的所有单元格外,无法在每次编辑时更新此类自定义函数用于编辑

而且,也许更令人沮丧的是,传递的解决方法(比如一个单元格引用所有带有公式的“关注”单元格)不会触发更新-似乎需要直接引用“关注”单元格

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


但是这个论坛上的许多成员(他们对这方面的知识比我多得多)的建议是:“不要使用自定义函数”。

我不确定这个确切的代码是否有效,但你可以试试这样的东西

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)");
  }
}
假设工作表“TargetSheetName”上的B2单元格位于工作表“ActiveSheetName”上,并且假设编辑的单元格位于工作表“ActiveSheetName”上,则当您编辑任何工作表中的任何单元格时,将触发OneEdit函数。因为有一个if语句来检查编辑的单元格是否在工作表“ActiveSheetName”上,所以只有当编辑的单元格在该工作表上时才会触发,并且它会将B“单元格设置为value=myfunction(A2:A12),强制更新(我猜)


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

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

我做了以下操作(假装A1是我正在观看的手机)

IF(LEN(A1)<1,”,customFunction())
如果我曾经编辑过该单元格,则会成功触发此操作。但是:

自定义函数返回值,但不能在外部设置值 它们所在的细胞。在大多数情况下,中的自定义函数 单元格A1不能修改单元格A5。但是,如果自定义函数返回 双数组,则结果溢出包含函数的单元格 并填充包含 自定义函数。您可以使用包含 返回[1,2],[3,4];。" 发件人:

这使得它几乎毫无用处,但它可能对你的案子有用

如果自定义函数被分配给一个项目触发器,它的功能会更强,所以我个人结束了将其添加到“脚本>资源>当前项目触发器>编辑时”的过程

基本上是“观看了一列”,所以它只在当前单元格在“编辑范围”内时才执行操作。这有点像是一个预兆,需要一些隐藏的单元格,但目前它对我有效

  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);
  }
var rowIndex=thisspreadsheet.getActiveCell().getRowIndex();
var colIndex=thisspreadsheet.getActiveCell().getColumn();
//夹紧到定制范围
if(行索引<3&&colIndex!=5)
{
返回0;
}
//对照副本核对
var name=SpreadsheetApp.getActiveSheet().getRange(rowIndex,5.getValue();
var copy=SpreadsheetApp.getActiveSheet().getRange(rowIndex,6.getValue();
如果(名称!=副本)
{
///值已更改,请执行操作
SpreadsheetApp.getActiveSheet().getRange(行索引,6).setValue(名称);
}

“似乎什么都不起作用”显然是夸大其词。具体来说,什么不起作用?例如,触发器将事件作为参数传递,因此自定义函数需要一个范围(如您所示)无法获取。该函数在电子表格的单元格中使用,并在该单元格中显示返回的结果。我希望该函数在编辑文档时更新单元格结果。
  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);
  }