2017-02-09 107 views
0

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

如果我没有正确地解释它,一个情况是如下:

  1. 按钮被设置为OFF
  2. 我输入20个类别为A5:A25
  3. 我把按钮
  4. 载入中...
  5. 数据被解析为每个类别从BF
  6. 我不碰别的文件中,并有时我看到“正在加载...”再次作为脚本重新运行

6号,似乎在随机时间间隔发生,我可以证实,“重新计算”设置为“改变时”(在文件中发现 - >电子表格设置 - >计算)

以上是样本脚本,但真正的脚本返回的JSON可能非常大,所以缓存不是基于我已阅读的当前限制的选项。

任何帮助将不胜感激 - 我在我的智慧结束试图弄清楚这一点!

+0

你可能想尝试通过这样的方式,它修改函数[优化您的自定义函数(https://developers.google.com/apps-script/guides/sheets/functions#optimization)将接受范围作为二维数组形式的输入,然后返回一个二维数组,该数组可以溢出到适当的单元格中。例如,只调用一次'DOUBLE()',但让它一次计算大量的单元格。 – Teyam

+0

我试过类似的东西,但最终发生的是如果我将几个URLFetches组合成一个函数,它将花费超过30秒,并产生一个错误“执行自定义函数的内部错误” –

回答

-1

我假设你设置按钮关闭不刷新?在脚本结束后将一行代码添加到脚本的末尾以将按钮设置为关闭的选项是否可以选择?

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

如果将按钮设置为“OFF”数据消失,如果我想保持显示的数据,这是不理想的。我现在正在做的是查询数据,复制/粘贴为本地excel文件的值,然后将按钮设置为“OFF”以减轻不需要的呼叫。理想情况下,我希望能够将其设置为“开”,以便我可以在多个用户之间共享该工作表。 –