【问题标题】:Custom Google Sheet Function Updating Without Any Cause自定义谷歌表格功能更新无任何原因
【发布时间】:2021-04-22 21:24:54
【问题描述】:

我正在使用自定义函数来提取 EVE Online 的价格数据,我只希望该函数在特定单元格更改时更新。相反,它每 10 到 20 分钟更新一次,这消耗了我每天的大量 URL 提取配额。

查看下方,您可以看到主要功能位于标有“仓库库存”的页面中。它提取“项目”列中项目的所有价格数据。单元格使用自定义函数刷新,该函数更改实用程序表中的单元格 B4。当该单元格更改时,由于 IF/THEN 语句,它会更新自定义函数中的值。最后将价格加载到主工作表中并按“产品”列排序。

我还重新计算了“更改时”并关闭了迭代计算。

感谢您的阅读以及您能提供的任何帮助。

自定义函数为:

    /**
* Query's Fuzz market API for the given types
* @param {range} A vertical range of type_ids.
* @return maxBuy and minSell for each type_id
* @customfunction
*/
function fuzzApiPriceData(type_ids) {
  if (!type_ids) throw 'type_ids is required';
  const ids = Array.isArray(type_ids) ? type_ids.map(id => id[0]) : [type_ids];
  const fuzz_price_data = JSON.parse(UrlFetchApp.fetch(`https://market.fuzzwork.co.uk/aggregates/?station=60008494&types=${ids.join(',')}`));
  return [['minSell', 'maxBuy']].concat(type_ids.map(type_id => [parseFloat(fuzz_price_data[type_id]['sell']['min']), parseFloat(fuzz_price_data[type_id]['buy']['max'])]));
}

【问题讨论】:

  • 尝试从基于时间的触发器运行它。
  • 尝试使用每月触发器,它仍然在做同样的事情。有没有办法在自定义函数中执行“return IF THEN”语句,这样它只会在满足特定条件(例如 Utility!B4 中的单元格值)时提取数据?
  • 嗨。您能否准确解释您希望自定义函数何时重新计算其值?一个例子将有助于理解它。另一方面,要查看执行函数的原因,您可以在左侧边栏中查看Executions。在那里你会看到每次执行的起源。
  • 我希望函数每天刷新,并且可以选择通过单元格 Utility!B4 的内容手动刷新函数。我有另一个函数将单元格 B3 和 B4 更改为 0,休眠 3 秒,将 B3 更改回 1,再休眠 3 秒,将 B4 更改回 1。因此,我们使用 IF THEN 语句的工作表中的其他函数是所有这些都由这 2 个来回变化的单元格更新。

标签: javascript json google-apps-script google-sheets


【解决方案1】:

我认为这里有一个相当基本的误解。

“自定义函数”被设计为写在工作表上的单元格中。它们天生就设计为始终运行,不断更新。

如果您尝试运行自定义脚本,您可以从脚本编辑器本身执行此操作,您甚至不需要在单元格中编写函数at ALL

我假设您没有编写您正在使用的“自定义函数”(?)所以将它转换为写入某个位置的脚本会有点困难(但并非不可能!)特定时间的工作表。但是您可能会更多地研究设计为在单元格中执行的自定义函数与设计为在时间触发器上运行的脚本之间的区别。

【讨论】:

  • 啊,是的,我有一堆自定义脚本,其中一个在运行时会更改单元格的内容。我只擅长编写脚本,而不是功能,这不是我的功能。我基本上只是想以一种除非被强制否则不会更新的方式编写函数
【解决方案2】:

关于你的回答:

我希望该功能每天刷新,并且可以选择通过单元格 Utility!B4 的内容手动刷新该功能

我建议你使用Installable Triggers:

  1. Time-driven trigger:可以每天在特定时间执行一个函数。
  2. Installable edit trigger:当特定单元格中的某个值发生变化时,它可以执行一个函数。

但是,如果你想手动执行一个函数,我建议你插入一个drawingassign a function

参考

【讨论】:

    【解决方案3】:

    我通常这样做是:在单元格中放置一个复选框。然后,在调用您的自定义函数时,添加对该单元格的额外引用,即使该参数未包含在您的自定义函数中。每次您切换真/假时,您的自定义功能都会重新激活。然后,您还可以使用仅更改 true/false 值的触发器定义另一个函数。这是工作表“数据”单元格 A3 中的示例:即使自定义函数仅考虑第一个和第二个参数,该函数也是 getDataJSON(C1,A2:U2,A1) 和 A1。 https://docs.google.com/spreadsheets/d/1DN0Gfim0LC098zVgrUpt2crPWUn4pWfZnCpuuL1ZiMs/edit?usp=sharing

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多