我拿到了Error: Cannot read property length of undefined
,但不太理解这个问题。
从stackoverflow的其他帖子中,我发现该函数无法确定解析对象的长度。
我正在做的是:
我确实将=Index(GOOGLEFINANCE("NASDAQ:GOOG";"price";HEUTE()-60;HEUTE());;2)
的谷歌股价历史数据导入到我的电子表格中。然后用CCD_ 3从数据中计算出21个简单移动平均值。
现在我比较股票价格和21 SMA,以确定股票价格是高于还是低于21 SMA。到目前为止还不错。
最后,我尝试编写一个函数,从最新的值开始计算21 SMA以上的天数。
function daysabove(input){
var output = 0;
for (var i = input.length-1;i>= 0;i--){
if (input[i][0]=="over" ){
if (input[i+1][0]=="under"){
output++;
break;
}
else {
output++;
}
} `
else {
output--;
}
}
return output;}
在电子表格上,我用=daysabove(C129:C148)
调用该函数。C129至C148,其包含以上或以下。
编辑:我甚至试着在一个包含手动编写的"above"&"under",因此与谷歌金融没有任何联系。仍然不起作用。
所以回到问题上来:应该定义长度或对象。这里怎么了?
错误:无法读取未定义的属性长度
发生这种情况是因为input
在从脚本编辑器调用时未定义,并且没有长度属性,因为您没有将任何值作为输入传递给function daysabove
。
错误:无法从未定义的读取属性[0]
发生这种情况是因为i+1
的计算结果超出了索引范围。比如说,你执行=daysabove(C1:C4)
。C1:C4将全部"结束"。
for (var i = input.length-1;i>= 0;i--){
if (input[i][0]=="over" ){
if (input[i+1][0]=="under"){
CCD_ 9将为4input.length-1
将为3i
初始化为3
请注意,在javascript数组中,第一个元素的索引为0
["over"、"over"、"over"one_answers"over"]从前到后的索引分别为0,1,2,3input[i][0]
==input[3][0]
将是C1:C4中的最后一个元素
下一个语句调用i+1,即input[4]
,它就是undefined
。未定义不是数组。因此,我们无法读取undefined的属性[0]
如果你要做一个自下而上的循环,那么确保一切都是相反的。因此,可以通过使用input[i-1][0]
作为下一个语句并将condition更改为i>0
来修复循环。还有其他语法错误。考虑复习阵列并参加教程
无论如何,
如官方文件所述,
历史数据无法通过Sheets API或应用程序脚本下载或访问如果您尝试这样做,您将在电子表格的相应单元格中看到#N/a错误。
您的脚本在任何情况下都会失败,因为它引用了谷歌财务的历史数据。
如果您只想计算下面天数以上的天数,请使用
=COUNTIF(C1:C4,"over")-COUNTIF(C1:C4,"under")