当我尝试将一个值保存到一个多维数组中时,我得到了错误"cannot set property xx of undefined to 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);
}任何帮助我做错事的人都会非常感激。
发布于 2019-07-16 23:38:55
编辑: TheMaster已经指出你已经在用final_values[x] = [];初始化你的数组了,在审阅了我的答案之后,我同意他们是正确的。
问题实际上是你的条件语句:
if (consol_values[y][0] != "" && consol_values[y][z+5] !="")应用程序脚本将继续读取一行,直到它看到;为止,因此,由于您没有将if块包含在花括号{}中,因此当读取final_values[x] = [];时,它将整个if块读取为:
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错误
final_values[x][0] = consol_values[y][0];https://stackoverflow.com/questions/57059443
复制相似问题