Javascript Google应用程序脚本数组未按预期写入工作表

Javascript Google应用程序脚本数组未按预期写入工作表,javascript,arrays,google-apps-script,google-sheets,Javascript,Arrays,Google Apps Script,Google Sheets,使用谷歌应用程序脚本,我试图将大量谷歌工作表中的数据整合到一张工作表中。为此,我使用push将每张图纸的值保存到一个数组中。数组似乎正确地保存了数据,但在写入数据时,某些操作不正常。它似乎是用于写出数组的长度函数 以下是日志文件中的数组值: [[[Text 1, Text 2, Gallon, 17.12, Tier 2 Generic Chem, 1.0, 125.0, 280.0, 120.0, , 95.0, 55.0, , , , 150.0, , 826.0, 14141.12, ,

使用谷歌应用程序脚本,我试图将大量谷歌工作表中的数据整合到一张工作表中。为此,我使用push将每张图纸的值保存到一个数组中。数组似乎正确地保存了数据,但在写入数据时,某些操作不正常。它似乎是用于写出数组的长度函数

以下是日志文件中的数组值:

[[[Text 1, Text 2, Gallon, 17.12, Tier 2 Generic Chem, 1.0, 125.0, 280.0, 120.0, , 95.0, 55.0, , , , 150.0, , 826.0, 14141.12, , , ], [Text 3, Text 4, Gallon, 16.11, Tier 2 Generic Chem, , , 270.0, , , , , , , , , , 270.0, 4349.7, , , ]]] 
问题似乎与下面的代码有关,可能是因为上面的数组中有3[int],但我不确定如何修复它,以便它引用正确的元素

consol_sheet.getRange(2,1,finalvalues2.length,finalvalues2[0].length).setValues(finalvalues2);
期望值:

finalvalues2.length=2和finalvalues2[0]。length=21

完整代码:

function getLastDataRow(sheet) {
  var lastRow = sheet.getLastRow();
  var range = sheet.getRange("B" + lastRow);
  if (range.getValue() !== "") {
    return lastRow;
  } else {
    return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
  }              
}

function iterateSheets2() 
{
  var ss=SpreadsheetApp.getActive();
  var folder=DriveApp.getFolderById('1k6ja-fmgxiVSY_Kw3kuwLTXWIkQCmTmD');//replace id with actual id of folder
  var files=folder.getFilesByType(MimeType.GOOGLE_SHEETS);
  var consol_sheet = SpreadsheetApp.openById('1HpQYDC8eRVLbEzOOGKsqHE6RGBKTE-6sqx5kTf8-TzM').getActiveSheet();
  consol_sheet.clear()
  var final_values = [];
  var finalvalues2 = [];
while(files.hasNext())
     {
      var file=files.next();
       Logger.log(file.getName());  
            
       var ts=SpreadsheetApp.openById(file.getId());  //file.getId()            
       var allShts = ts.getSheetByName('FY20')                    
       var lr = getLastDataRow(allShts)       
       var consol_values = allShts.getRange(9,1,lr-8,22).getValues();                   
       finalvalues2.push(consol_values[0]) 
       Logger.log(finalvalues2)
                   
          
     }
   // consol_sheet.getRange(2,1,consol_values.length,consol_values[0].length).setValues(consol_values);
  consol_sheet.getRange(2,1,finalvalues2.length,finalvalues2[0].length).setValues(finalvalues2);
数组是三维的,要将值设置到电子表格中,需要二维值范围 不确定您是如何获得此阵列的,但您可以使用

最终价值2=最终价值2[0]

随后,在工作表中设置值的请求应按预期工作

更新

如果您的3D阵列具有多个二维条目,则转换该阵列的一种优雅方法是结合和:


finalvalues2=[].concat.apply[],finalvalues2;

请按照中的建议添加对您的搜索/研究工作的简要描述。从阅读finalvalues2.pushConsole\u值[0]开始您只推了第一行。对不起,我在我的原始帖子和发布代码时弄乱了代码,忘记了删除[0]。结果表明,只有当我在文件夹中有1个文件时,这才起作用。添加第二个文件时,我会出错。异常:参数编号[]与SpreadsheetApp.Range.setValues的方法签名不匹配。第37行,文件testI我刚刚看到了您的代码,所以您使用的是finalvalues2.PushConsole\u值[0]或者finalvalues2.pushconsol_值?如果您尝试执行的是后者,请参阅我更新的答案。再次感谢,我自己永远也不会明白这一点。