当前位置: 首页 > 知识库问答 >
问题:

Google Sheets脚本性能与慢速自定义功能

汝臻
2023-03-14

设置:我有一个Google工作表,我想在其中运行一个使用脚本实现的自定义函数。此脚本用于执行相对较长的URL查找和解码过程(每次调用10毫秒,取决于带宽和ping)。自定义函数使用一列作为输入,并返回结果。

问题:当我的Google工作表打开时,使用此计算的列将刷新。这会使Google工作表停止大约10秒钟,直到重新计算列中的每个单元格。这只会变得更糟,因为我添加到我的电子表格。

问题:我可以更改我的函数脚本,或者更改Google sheets中的设置,以便只有在更改输入单元格时才计算慢速自定义函数吗?

对于任何好奇的人,这里有一个关于我的问题的演示表

共有2个答案

庄康胜
2023-03-14

如果自定义函数较少,则性能会稍好一些。你可以重写你的函数来容纳一个数组,这样你就只有一个函数而不是一次运行100个。

function mySlowFunction(x) {
  //Utilities.sleep(x*100); //100 ms
  if (x.map) {
    return x.map(function(y) {return mySlowFunction(y) });
  } else {
    return x * 100;
  }
}
訾旭
2023-03-14

在我的答案在谷歌表格中,我可以包装一个标准函数在一个自定义函数来控制它何时运行?我分享了一个想法,就是有几个叫做“冻结”/“解冻”的按钮来控制“昂贵公式”的重新计算。

在这种情况下,您可以在关闭电子表格之前使用自定义函数“冻结”该范围,以便下次打开该电子表格时打开速度更快,然后在需要更新冻结的范围时将其“解冻”。

发布原始版本后,OP要求一个简单的版本,但由于我的原始实现是西班牙语的东西,所以我在那里分享了最重要的代码行。核心方法服务是

  • 用于存储公式的全局变量(如果公式始终相同)

然后我意识到我可以改进发布一个未列出的GoogleSheets附加组件,它使用PropertiesService实现一个“公式存储”,其中包含添加/删除/列出公式的函数和一个动态菜单,而不是按钮。

还可以尝试使用一个时间驱动的触发器,它可以在夜间运行,以防您忘记冻结自定义函数结果的范围。

 类似资料:
  • 1.1.1. 自定义功能 1.1.2. 拦截器 1.1.3. 入口词多样化 1.1.4. 场景化技能 1.1.1. 自定义功能 本文将讲解除了Rokid技能创建平台上面提供的技能开发工具外,平台独有的一些自定义功能。 目录 一、拦截器 二、入口词多样化 三、场景化技能 1.1.2. 拦截器 拦截器接口文档 语义理解(NLP)的拦截器(interceptor),可以允许开发者在进入Rokid NLP

  • 对于我的项目,我们被要求实现我们自己的连接池。我们不允许使用来自jdbc的PGPoolingDataSource。当我使用jdbc池时,我的程序运行得非常快,而我自己的连接池运行得不可预测,速度也慢得多。我的连接使一些任务等待了很长时间,这是jdbc池所没有的。 我正在使用Arrayblockingqueue实现连接池,我只是创建一个预先说过的连接数,然后让客户机借用并放回。 我是说这对我来说似乎

  • 问题内容: 使用我正在尝试在模板中使用自己的功能之一。不幸的是,我无法使用go模板的功能映射功能。我得到的只是以下错误: 简化的测试用例如下所示(): 我有以下简单模板(): 这是1.1.1。 问题答案: IIRC,必须在解析模板之前定义模板功能图。下面的代码似乎有效。

  • 我是新来的谷歌工作表脚本和卡住试图做以下事情。我有2列:C包含开始时间码,D包含结束时间码。第三列(F)包含从开始时间码和结束时间码产生的电影提示的长度。由于时间码来自脚本,因此包含结果的单元格不能导出为其他格式。因此,我试图创建第四列,将列F的结果打印为值。我设法写了一个小脚本,可以做到这一点。它看起来像这样: 问题是,当我编辑C或D中的任何时间码时,它不会自动执行。 所以我试了一下: 它没有给

  • 问题内容: 我想使用Django建立一个简单的热门问题列表。我有一个函数,可以根据一些参数评估每个问题的“ 热度 ”。 功能看起来与此类似(此处为完整功能) 我的问题和投票模型(相关部分) 现在,它是正数或负数。热功能会收到正面投票数和负面投票数以及问题的创建日期。 我已经尝试过类似的方法,但是它不起作用。 我得到的错误是: 我理解该错误,但是我没有正确的方法。 问题答案: 您不能将python函

  • 本文向大家介绍Android自定义闹钟功能,包括了Android自定义闹钟功能的使用技巧和注意事项,需要的朋友参考一下 Android闹钟alarmManager+PendingIntent的使用方法,供大家参考,具体内容如下 这次给大家分享两种闹钟: 第一种是当到达闹钟时间后执行一次相应的操作 alarmManager.set(AlarmManager.RTC_WAKEUP,c.getTimeI