setValues无法将数组转换为object [] []

时间:2017-04-11 11:33:25

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

我一直在谷歌应用程序脚本上编写一张表格:

  function basePesa(){
 var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("aux");
  var unique = sheet.getRange("C1").setFormula("=unique(A:A)");
 var Avals = sheet.getRange("C1:C").getValues();
 var Alast = Avals.filter(String).length;
 var transp = sheet.getDataRange().getValues();

 var ss = SpreadsheetApp.openById("14Y3xiAa9kdoK_YO_tAVN-YWC9RE1EANV5wm8Ez1sa1o");
 var base =ss.getSheetByName("Base PESA");
 var values = base.getDataRange().getValues();
 var newdata = new Array(values.length);
 var y = 0;

//  Browser.msgBox(transp.length);

 for(var i=0;i<Alast;i++){


 var tra = Avals[i][0];

 for(var x =1; x<values.length;x++){

 if(values[x][18] == tra){
  newdata[y] = new Array(values[0].length);

 for(var p=0; p<values[0].length;p++)
 newdata[y][p] = values[x][p];   

 y++;
 }

 }   

  }
  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Bco de Dados").getRange("A2:AZ"+(y+1)+"").setValues(newdata);
// Browser.msgBox(newdata);


}

似乎我无法将数组写入范围。我已经检查了范围是否匹配以及我确定这个数组是2D数组。有没有指示?

提前致谢!

3 个答案:

答案 0 :(得分:5)

数组1:[A,B,C]&lt; ----兼容1行,3列

数组2:[[A],[B],[C]]&lt; ---兼容3行,1列

数组3:[[A,B,C],[A,B,C],[A,B,C]]&lt; ---兼容3行,3列**

**重要的是要注意,较大阵列中每个较小阵列的宽度(在本例中为3)对于每个较小的阵列必须相同。

Click Here for a Visual Example (Image)

答案 1 :(得分:0)

看起来新数据阵列的创建是个问题。这是一个正在运行的示例(我将错误的代码放在评论中):

function basePesa(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("aux");
  var unique = sheet.getRange("C1").setFormula("=unique(A:A)");
  var Avals = sheet.getRange("C1:C").getValues();
  var Alast = Avals.filter(String).length;
  var transp = sheet.getDataRange().getValues();

  var ss = SpreadsheetApp.openById("14Y3xiAa9kdoK_YO_tAVN-YWC9RE1EANV5wm8Ez1sa1o");
  var base =ss.getSheetByName("Base PESA");
  var values = base.getDataRange().getValues();
  var newdata = [];//new Array(values.length);
  var y = 0;

  //  Browser.msgBox(transp.length);

  for(var i=0;i<Alast;i++){


    var tra = Avals[i][0];

    for(var x =1; x<values.length;x++){

      if(values[x][18] == tra){
        //newdata[y] = new Array(values[0].length);

        var test = [];

        for(var p=0; p<values[0].length;p++)
        {
          test.push(values[x][p]);
          //newdata[y][p] = values[x][p].toString(); 
        }

        newdata.push(test);

        y++;
      }

    }   

  }

  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Bco de Dados").getRange("A2:AZ"+(y+1)+"").setValues(newdata);

  // Browser.msgBox(newdata);

}

答案 2 :(得分:0)

基于类似的问题,我猜想您在最后一行有

SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Bco de Dados").getRange("A2:AZ"+(y+1)+"").setValues(newdata);

代替

.setValues(newdata);

您应该使用

.setValues([newdata]);

请注意方括号!该解决方案基本上与(但更短)

...
var newdata = []
var test = []
...
test.push(values[x][p]
...
newdata.push(test)
...
....setValues(newdata)