自定义功能会定期重新运行

时间:2017-02-09 08:41:26

标签: google-apps-script google-sheets custom-function

我创建了一个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)

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

  1. 按钮设置为OFF
  2. 我在A5中输入了20个类别:A25
  3. 我打开按钮
  4. 加载...
  5. 从B-F
  6. 解析每个类别的数据
  7. 我不接触文档中的任何其他内容,有时我会看到"正在加载..."再次当脚本重新运行时
  8. 6号似乎是以随机的时间间隔发生的,我可以确认"重新计算"设置为" On Change" (可在文件 - >电子表格设置 - >计算中找到)

    以上是一个示例脚本,但真实脚本返回的JSON可能非常大,因此缓存不是基于我读过当前限制的选项。

    任何帮助都会受到赞赏 - 我在我的智慧结束时试图解决这个问题!

1 个答案:

答案 0 :(得分:-1)

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

sheet.getRange('A1').setValue('OFF');