我有一个我在电子表格中使用的脚本。它位于单元格B2处,它采用类似=myfunction(A2:A12)
的参数。在内部,该函数从大量单元格中获取信息。
似乎没什么用。我尝试将其添加到
脚本>资源>当前的项目触发器>在编辑上
脚本>资源>当前的项目触发器>在开放
如何使用此功能更新每个文档编辑的结果?
答案 0 :(得分:1)
当您在自定义函数(如getRange和getValues等)中调用Google Apps服务时,遗憾的是,除了传递所有之外,无法通过每次编辑更新此类自定义函数你正在“观察”编辑的单元格。
而且,或许更令人沮丧的是,传递的解决方法是说一个单元格引用所有“看过”的单元格,并且公式不会触发更新 - 似乎需要直接参考“观察”细胞。
您可以将GoogleClock()作为参数传递,这至少会每分钟更新一次函数输出。
但是这个论坛上许多成员的建议(比我更了解这些东西)只会是:“不要使用自定义函数”。
答案 1 :(得分: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)");
}
}
假设工作表“TargetSheetName”中的B2单元格并假设已编辑的单元格位于工作表“ActiveSheetName”上,则在编辑任何工作表中的任何单元格时,将触发onEdit函数。由于有一个if语句来检查该编辑的单元格是否在工作表“ActiveSheetName”上,只有当编辑过的单元格位于该工作表上并且它将B“单元格设置为值= myfunction(A2:A12)时才会触发,强迫它更新(我猜)。
希望我是对的,我很乐于助人
答案 2 :(得分:0)
我有一个类似的问题,对我来说,我想“观察”一个特定的细胞来触发我的功能。
我做了以下(假装A1是我正在观看的细胞)
IF(LEN(A1) < 1, " ", customFunction() )
如果我编辑过该单元格,则会成功触发。但是:
“自定义函数返回值,但不能在外部设置值 它们所处的细胞。在大多数情况下,自定义函数 单元格A1不能修改单元格A5。但是,如果自定义函数返回一个 双数组,结果溢出包含该函数的单元格 并填充包含该细胞的细胞的下方和右侧的细胞 自定义功能。您可以使用包含的自定义函数对此进行测试 返回[[1,2],[3,4]] ;.“ 来自:https://developers.google.com/apps-script/execution_custom_functions
这几乎没用,但它可能对你的情况有用吗?
如果将自定义功能分配给项目触发器,则它具有更强大的功能,因此我个人将其添加到“脚本&gt;资源&gt;当前项目触发器&gt;在编辑中”
并且基本上“观看了一个列”,因此只有在当前单元格在“编辑范围”内时才会执行操作。这有点像一个小屋,需要一些隐藏的细胞,但它现在对我有用
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);
}