只需在Google表格中调用一次自定义函数,然后将值保存到单元格

问题描述

我编写了一个自定义的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);
    }
}

请记住,此实现仅在每个单元格被一一编辑时才有效。要对一行或完整的元素数组执行相同操作,您必须遍历每个单元格并遵循相同的步骤。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...