我创建了一个Google电子表格,该电子表格使用自定义函数调用付费API服务,并根据一些输入参数解析结果。我能够使用激活按钮成功调用和解析数据(A1是一个单元,如果它的值是" ON"脚本被调用)。
我的问题是,如果我通过离开激活按钮" ON"来解析数据,则自定义功能会自行重新运行。如果我要更改输入参数,我会理解它重新运行,但我可以坐在那里盯着屏幕,它会再次显示"正在加载......"并再次解析数据,就好像我已将按钮设置为" OFF"和" ON"再次。这似乎是随机发生的 - 可能是5分钟或2小时。
我附上下面的功能,以及电子表格的逻辑
/// 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
}
在电子表格中,我将A1作为ON / OFF按钮,A5作为单独的类别(即A5 =游戏,A6 =购物等)。将使用以下excel公式:
B5将= IF(AND($ A $ 1 =" ON",ISBLANK(A5)= FALSE),TRANSPOSE(getCategory(A5,' API KEY'!$ B) $ 6)),"&#34)
B6将= IF(AND($ A $ 1 =" ON",ISBLANK(A6)= FALSE),TRANSPOSE(getCategory(A6,' API KEY'!$ B) $ 6)),"&#34)
如果我没有正确解释,情况如下:
6号似乎是以随机的时间间隔发生的,我可以确认"重新计算"设置为" On Change" (可在文件 - >电子表格设置 - >计算中找到)
以上是一个示例脚本,但真实脚本返回的JSON可能非常大,因此缓存不是基于我读过当前限制的选项。
任何帮助都会受到赞赏 - 我在我的智慧结束时试图解决这个问题!
答案 0 :(得分:-1)
我假设您将按钮设置为关闭以不刷新?是否可以选择在脚本末尾添加一行代码,以便在脚本完成后将按钮设置为关闭?
sheet.getRange('A1').setValue('OFF');