【问题标题】:Google App Scripts Array not writing to sheet as expectedGoogle App Scripts Array 未按预期写入工作表
【发布时间】:2020-08-27 14:10:09
【问题描述】:

使用 Google 应用程序脚本我试图将来自多个 google 表格的数据合并到一个表格中。为此,我使用 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 = 2finalvalues2[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);

【问题讨论】:

  • 请按照How to Ask 中的建议添加您的搜索/研究工作的简要说明。
  • finalvalues2.push(consol_values[0]) 你只是在推第一行。
  • 抱歉,我在原始帖子和发布代码之间弄乱了代码,忘记删除 [0]。

标签: javascript arrays google-apps-script google-sheets


【解决方案1】:

您的数组是 3-D,要将值设置到电子表格中,您需要一个 2-D 值范围

不确定你是如何获得这个数组的,但你可以将它转换为二维

finalvalues2 = finalvalues2[0];

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

更新

如果您的 3D 数组有多个 2-D 条目,转换它的一种优雅方法是结合使用 concatapply()

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

【讨论】:

  • 原来只有当我在文件夹中有 1 个文件时才有效,当添加第二个文件时我得到错误。例外:参数 (number[]) 与 SpreadsheetApp.Range.setValues 的方法签名不匹配。 (第 37 行,文件“测试”)
  • 我刚看到你的代码,你用的是finalvalues2.push(consol_values[0])还是finalvalues2.push(consol_values)
  • 如果您尝试执行的是后者 - 请参阅我更新的答案。
  • 再次感谢,我自己永远也想不通。
猜你喜欢
  • 2019-10-28
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多