Google apps script 谷歌应用程序脚本-电子表格运行脚本onEdit?
我在电子表格中使用了一个脚本。它位于单元格B2,并接受类似于soGoogle 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服务时,很遗憾,除了传递您正在“监视”的所有单元格外,无法在每次编辑时更新此类自定义函数用于编辑 而且,也许更令人沮丧
=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);
}