如何定义数组

时间:2019-07-16 14:19:07

标签: javascript multidimensional-array google-apps-script google-sheets

当尝试将值保存到多维数组时,出现“无法将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);

}

任何对我做错事的帮助都非常感谢。

1 个答案:

答案 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