问题描述
我编写了一个自定义的Google Apps脚本函数,该函数正在被Google工作表调用。在此函数中,将调用一个API,并返回该API的结果,以便将其显示在Google工作表的调用单元格中。
我现在的问题是,每次我打开文档时,工作表都会调用此函数,并且该函数有80.000多个单元格。
是否可以将返回的值保存到单元格中,并且在返回值后不再次调用自定义函数?我希望每个单元格仅调用一次函数,即使我关闭文档并重新打开它也是如此。返回值应保存,直到其他内容写入到单元格中为止。那将使我的工作表文档比当前状态更有用。
解决方法
从问题开始
是否可以将返回的值保存到单元格中,并且在返回值后不再次调用自定义函数?我希望每个单元格仅调用一次函数,即使我关闭文档并重新打开它也是如此。返回值应保存,直到其他内容写入到单元格中为止。那将使我的工作表文档比当前状态更有用。
仅使用自定义功能是不可能的。没有简单的解决方案是实现此目的,为了使事情简单,您应该寻找另一种方法来实现自定义功能正在执行的操作。
一个选项是使用触发器(包括自定义菜单/与图纸关联的函数)来检查应具有自定义函数返回值的单元格是否为空,并在这种情况下用相应的值填充。最佳使用触发器取决于您的电子表格工作流程。
,按照 Ruben 的规定,这是不可能的,使用自定义函数。
在我的特殊情况下,我求助于使用由电子表格的编辑事件触发的 Apps 脚本函数,并验证该事件是否在我只想执行一次的函数所在的列中,稍后替换其内容与调用 API 的结果。
function freezeValue(e) {
var rangeEvent = e.range;
var col = rangeEvent.getColumnIndex();
if (col === 2) { #Verify column of event
var value = rangeEvent.getValue();
/*Call your api*/
result_api = CALL_API(value)
rangeEvent.setValue(result_api);
}
}
请记住,此实现仅在每个单元格被一一编辑时才有效。要对一行或完整的元素数组执行相同操作,您必须遍历每个单元格并遵循相同的步骤。