0

我创建了一个谷歌电子表格,它使用自定义函数来调用付费 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)),"")

如果我没有正确解释,情况如下:

  1. 按钮设置为关闭
  2. 我在 A5:A25 中输入了 20 个类别
  3. 我打开按钮
  4. 正在加载...
  5. 从 BF 中为每个类别解析数据
  6. 我没有触及文档中的任何其他内容,有时我会在脚本重新运行时再次看到“正在加载...”

数字 6 似乎以随机时间间隔发生,我可以确认“重新计算”设置为“更改时”(在文件 -> 电子表格设置 -> 计算中找到)

以上是一个示例脚本,但真正的脚本返回的 JSON 可能非常大,因此根据我对当前限制的了解,缓存不是一个选项。

任何帮助将不胜感激 - 我正在努力解决这个问题!

4

1 回答 1

-1

我假设如果您将按钮设置为关闭不刷新?是否可以选择在脚本末尾添加一行代码以在脚本完成后将按钮设置为关闭?

sheet.getRange('A1').setValue('OFF');
于 2017-02-09T09:08:41.413 回答