我创建了一个谷歌电子表格,它使用自定义函数来调用付费 API 服务并根据一些输入参数解析结果。我可以使用激活按钮成功调用和解析数据(A1 是一个单元格,如果其值为“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 作为开/关按钮,将 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),TRANSPOSE(getCategory(A6,'API KEY'!$B$6)),"")
如果我没有正确解释,情况如下:
- 按钮设置为关闭
- 我在 A5:A25 中输入了 20 个类别
- 我打开按钮
- 正在加载...
- 从 BF 中为每个类别解析数据
- 我没有触及文档中的任何其他内容,有时我会在脚本重新运行时再次看到“正在加载...”
数字 6 似乎以随机时间间隔发生,我可以确认“重新计算”设置为“更改时”(在文件 -> 电子表格设置 -> 计算中找到)
以上是一个示例脚本,但真正的脚本返回的 JSON 可能非常大,因此根据我对当前限制的了解,缓存不是一个选项。
任何帮助将不胜感激 - 我正在努力解决这个问题!