当尝试将值保存到多维数组时,出现“无法将undefined的属性xx设置为xx”的错误。几周前我有这段代码可以运行,现在却没有。我不确定发生了什么变化,但是我相信错误与数组的定义有关。
function iterateSheets()
{
var ss=SpreadsheetApp.getActive();
var folder=DriveApp.getFolderById('1ezdV7AHBNyq6aZdqKdvhlOhKMmLPhQoW');//replace id with actual id of folder
var files=folder.getFilesByType(MimeType.GOOGLE_SHEETS);
var consol_sheet = SpreadsheetApp.openById('1FyuizUjU8W8idMonEp0qFthvTDjfwmnboZivAAozDXU').getActiveSheet();
consol_sheet.clear()
var x=0;
var z=0;
var final_values = [[]];
while(files.hasNext())
{
var file=files.next();
var ts=SpreadsheetApp.openById(file.getId());
var allShts=ts.getSheets();
for(var i=0;i<1;i++)
{
// if (allShts[i] == "Aug" || allShts[i] = "Sept")
//{
var consol_values = allShts[i].getRange(8,1,allShts[i].getLastRow(),10).getValues();
var headers = allShts[i].getRange(4,6,1,4).getValues();
var position= allShts[i].getRange("B1").getValue();
var period = allShts[i].getRange("B2").getValue();
var email = allShts[i].getRange("B3").getValue();
for (var z = 0;z<3;z++)//
{
for (var y= 0;y<allShts[i].getLastRow();y++)
{
if (consol_values[y][0] != "" && consol_values[y][z+5] !="")
final_values[x] = [];
final_values[x][0] = consol_values[y][0] //AI pack
final_values[x][1] = '1111'
final_values[x][2] = consol_values[y][2] ; //measure
final_values[x][3] = email ;
final_values[x][4] = position ;
final_values[x][5] = headers[0][z];//location
final_values[x][6] = 1;
final_values[x][7] = period;
final_values[x][8] = consol_values[y][3]; //price
final_values[x][9] = consol_values[y][z+5]; //fcst
if (consol_values[y][z+5] != "")
{
final_values[x][10] =(consol_values[y][25]); //fcst value
}
x = Number(x)+1 //row count for consolidation output
}
//}
}
}
}
//consol_sheet.getRange(2,1,final_values.length,final_values[0].length).setValues(final_values);
}
任何对我做错事的帮助都非常感谢。
答案 0 :(得分:1)
编辑:TheMaster已经指出您已经用final_values[x] = [];
初始化了数组,在查看了我的回答后,我同意它们是正确的。
问题实际上是您的条件语句:
if (consol_values[y][0] != "" && consol_values[y][z+5] !="")
Apps脚本将继续读取一行,直到看到;
,因此当{{1}时,您没有将if
块包含在大括号{}
中}正在读取,它正在读取整个if块,如:
final_values[x] = [];
这意味着如果if (consol_values[y][0] != "" && consol_values[y][z+5] !="") final_values[x] = [];
的值为consol_values[y][0] != "" && consol_values[y][z+5] !=""
,则内部数组将永远不会初始化,并且分配时会出现False
错误
cannot set property