在Google Sheets脚本的特定功能内插入睡眠

时间:2018-12-04 16:44:26

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

我正在尝试从第三方从API提取数据并将其插入Google表格。但是,该第三方每分钟仅允许3个请求,因此我尝试在为此请求构建的函数中使用Utilities.sleep功能。

我的工作表如下:

它具有我正在使用的功能所必需的两个输入(以下):

function GET_DETAILS_RECEITA(CNPJ,sleep_seconds) {
  Utilities.sleep(sleep_seconds*1000);

  var fields = 'nome,fantasia,email,telefone';
  var baseUrl = 'https://www.receitaws.com.br/v1/cnpj/';
  var queryUrl = baseUrl + CNPJ;

  if (CNPJ == '') {
    return 'Give me CNPJ...';
  }

  var response = UrlFetchApp.fetch(queryUrl);
  var json = response.getContentText();
  var place = JSON.parse(json);

  return [[ place.nome,
            place.fantasia,
            place.telefone,
            place.email,
          ]];
}

从技术上讲,它应该可以工作,但是由于某种原因,我只能在第一个中获得回报。

enter image description here

我遇到的错误非常笼统,“错误:错误地执行错误个性化。” (类似“错误:个性化功能执行中的内部错误”)。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

来自https://developers.google.com/apps-script/guides/sheets/functions

  

自定义函数调用必须在30秒内返回。如果不是,则该单元将显示错误:内部错误,执行自定义功能。

考虑到上述情况,在自定义函数上使用sleep并不是一个好主意,该函数将按OP的意图使用。而是使用自定义菜单或脚本编辑器来执行脚本。

为了最大程度地减少对函数的更改,可以使用将值读/写到电子表格并将必需的参数传递给GET_DETAILS_RECEITA

的函数。

答案 1 :(得分:0)

我会考虑在对话框中使用类似的方法。只要您使用Chrome,就可以在设置的时间间隔内传递一个额外的参数。

<script>
var CNPJ='what ever';
window.onload=function(){setInterval(getDetails,25000,CNPJ);}
function getDetails(CNPJ){
  google.script.run.GET_DETAILS_RECEITA(CNPJ)
}
</script>

如果要回调,请与withSuccessHandler();