我创建了一个谷歌电子表格,它使用自定义函数来调用付费API服务并根据几个输入参数解析结果。我可以使用激活按钮成功调用和解析数据(A1是一个单元格,如果它的值为“ON”,脚本被调用)。自定义函数定期重新运行自己
我的问题是,如果通过离开激活按钮“开启”来解析数据,则自定义函数会自行重新运行。如果我要改变输入参数,我会理解它重新运行自己,但我可以坐在那里盯着屏幕,它会再次显示“Loading ...”并再次解析数据,就好像我已经设置了一样该按钮再次“关闭”和“开启”。这似乎是随机发生的 - 可能是5分钟或2小时。
我附加以下的功能,以及我将具有A1作为ON/OFF按钮电子表格
/// This function injects the variables into the HTTP service and if the data can be parsed returns an array.
function getCategory (category,key){
var apiurl = "https://SERVICE/"+category+"/Country?Format=JSON&id="+key
var result = []
try {
var category_data = parse(apiurl)
var data_dictionary = category_data.TopCountryShares
for (var i in data_dictionary){
result.push(data_dictionary[i].CountryCode)
}
}
catch(e) {
result.push("No Data")
}
return result
}
//// This is the function that parses the data above
function parse(url){
var parsing_url = url
var fetchapi = UrlFetchApp.fetch(parsing_url)
Utilities.sleep(2000)
var data=JSON.parse(fetchapi)
return data
}
在电子表格的逻辑,和A5如向下各个类别(即A5 =游戏,A6 =购物等)。将使用以下excel公式:
B5将= IF(AND($ A $ 1 =“ON”,ISBLANK(A5)= FALSE),TRANSPOSE(getCategory(A5,'API KEY'!$ B $ 6 )), “”)
B6将是= IF(AND($ A $ 1 = “ON”,ISBLANK(A6)= FALSE),转置(的getCategory(A6, 'API KEY'!$ B $ 6)) , “”)
如果我没有正确地解释它,一个情况是如下:
- 按钮被设置为OFF
- 我输入20个类别为A5:A25
- 我把按钮
- 载入中...
- 数据被解析为每个类别从BF
- 我不碰别的文件中,并有时我看到“正在加载...”再次作为脚本重新运行
6号,似乎在随机时间间隔发生,我可以证实,“重新计算”设置为“改变时”(在文件中发现 - >电子表格设置 - >计算)
以上是样本脚本,但真正的脚本返回的JSON可能非常大,所以缓存不是基于我已阅读的当前限制的选项。
任何帮助将不胜感激 - 我在我的智慧结束试图弄清楚这一点!
你可能想尝试通过这样的方式,它修改函数[优化您的自定义函数(https://developers.google.com/apps-script/guides/sheets/functions#optimization)将接受范围作为二维数组形式的输入,然后返回一个二维数组,该数组可以溢出到适当的单元格中。例如,只调用一次'DOUBLE()',但让它一次计算大量的单元格。 – Teyam
我试过类似的东西,但最终发生的是如果我将几个URLFetches组合成一个函数,它将花费超过30秒,并产生一个错误“执行自定义函数的内部错误” –