Google sheet 自定义函数 returns 有时未定义值
Google sheet custom function returns undefined Values sometimes
我已经在 Google Sheet Apps 脚本中为 return 一只股票的最新每周收盘价编写了一个函数。
但是在 Google Sheets 中使用它时,一些单元格会获取未定义的数据。
但是相同的单元格有时会获得正确的值。无法理解这里的问题是什么。
当我从 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;
}
此答案对应于 question rev 3,标题为 "How to use Promise in appscript?"
问题的标题是询问尝试的解决方案而不是实际问题(X-Y 问题)。 UrlFetchAp.fetch 是异步的假设是错误的(参见 Is google apps script synchronous?);实际问题是在某些单元格上获取未定义的值。
解决方案将取决于您在获取响应为
导致未定义的值。一种替代方法是在将值发送到电子表格之前用 ""
(空字符串)替换未定义的值,这将导致 Google 工作表上出现空单元格。
另一方面,您查询的API可能没有返回您认为的JSON,所以首先您必须了解它,然后设置有关如何返回的规则将结果发送到电子表格,因为并非总是可以将 JSON 转换为简单的 table 结构。
UrlFetchApp.fetch(url)
returns 一个 HTTP 响应对象。此响应包含一个 HTTP 响应代码,该代码可能 200
用于成功获取,但由于多种原因可能 return 其他代码。
过去有人建议使用一种称为指数退避的算法,例如本例 Error message: "Cannot connect to Gmail"。注意不要超过 30 秒的执行时间限制。
相关
我已经在 Google Sheet Apps 脚本中为 return 一只股票的最新每周收盘价编写了一个函数。
但是在 Google Sheets 中使用它时,一些单元格会获取未定义的数据。
但是相同的单元格有时会获得正确的值。无法理解这里的问题是什么。
当我从 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;
}
此答案对应于 question rev 3,标题为 "How to use Promise in appscript?"
问题的标题是询问尝试的解决方案而不是实际问题(X-Y 问题)。 UrlFetchAp.fetch 是异步的假设是错误的(参见 Is google apps script synchronous?);实际问题是在某些单元格上获取未定义的值。
解决方案将取决于您在获取响应为
导致未定义的值。一种替代方法是在将值发送到电子表格之前用 ""
(空字符串)替换未定义的值,这将导致 Google 工作表上出现空单元格。
另一方面,您查询的API可能没有返回您认为的JSON,所以首先您必须了解它,然后设置有关如何返回的规则将结果发送到电子表格,因为并非总是可以将 JSON 转换为简单的 table 结构。
UrlFetchApp.fetch(url)
returns 一个 HTTP 响应对象。此响应包含一个 HTTP 响应代码,该代码可能 200
用于成功获取,但由于多种原因可能 return 其他代码。
过去有人建议使用一种称为指数退避的算法,例如本例 Error message: "Cannot connect to Gmail"。注意不要超过 30 秒的执行时间限制。
相关