Google表格自定义函数有时会返回未定义的值

时间:2019-10-13 16:08:27

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

我编写了一个函数来返回Google Sheet Apps脚本中股票的最新每周收盘价。
但是在Google表格中使用此功能时,某些单元格正在获取未定义的数据。 但是,相同的单元有时会获得正确的值。不能理解这里的问题。 当我从googlesheet单元执行功能时,是否还可以调试我的代码?

function getWeeklyClosing(stockName){

  var date =new Date()
  var endDate = Utilities.formatDate(new Date(), "GMT+1", "yyyy/MM/dd")

  var startDate = Utilities.formatDate(new Date(date.getTime()-10*(24*3600*1000)), "GMT+1", "yyyy/MM/dd")

  var url ='https://www.quandl.com/api/v3/datasets/BSE/BOM'+stockName+'?start_date='+startDate+'&end_date='+endDate+'&collapse=weekly&api_key=3VCT1cPxzV5J4eGFwfvz';
  var options =
      {
        'muteHttpExceptions': true,
        "contentType" : "application/x-www-form-urlencoded",
        "headers":{"Accept":"application/json"}
      }; 
  var response = JSON.parse(UrlFetchApp.fetch(url, options))
  var weeklyEma=response.dataset.data[0][4];
  return weeklyEma;
}

2 个答案:

答案 0 :(得分:4)

此答案对应于question rev 3,标题为“如何在应用程序脚本中使用Promise?”

问题的标题是询问所尝试的解决方案,而不是实际问题(X-Y问题)。 UrlFetchAp.fetch是异步的假设是错误的(请参见Is google apps script synchronous?);实际的问题是在某些单元格上获得未定义的值。

解决方案将取决于在获取响应为 导致未定义的值。一种替代方法是,在将未定义的值发送到电子表格之前,用""(空字符串)替换未定义的值,这将导致Google表格中的单元格为空。

另一方面,可能是您查询的API没有返回您认为的JSON,因此首先您必须了解它,然后设置关于如何将结果发送到电子表格的规则,这并不总是如此。可以将JSON转换为简单的表结构。

答案 1 :(得分:3)

UrlFetchApp.fetch(url)返回一个HTTP响应对象。该响应包含HTTP响应代码,可以成功获取200,但由于多种原因却可以返回其他代码。

过去,有人建议使用称为指数补偿的算法,例如Error message: "Cannot connect to Gmail"。请注意不要超过30秒的执行时间限制。

相关