如何使用Google Script一次将数组数据附加到电子表格列?

时间:2015-10-24 01:36:34

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

我试图将addArray []的数据立即附加到A列的末尾。但是,我的数组不是多维的,无法使用此方法:

这是我添加到数组的方式:

  var toAdd=[];
  var thisurl="red apple http://awebsite.com/1.jpg";
  toAdd.push(thisUrl);

这就是我想一次追加数组的方式

function AddToSpreadsheet()
{
 var data = SpreadsheetApp.getActiveSheet().getRange('A12:A').getValues();
    var toAdd=["red apple http://awebsite.com/1.jpg",
              "green apple http://1awebsite.com/2.jpg",
              "red apple http://1awebsite.com/3.jpg",
              "rotten apple http://rottenApple.com"];



  if(toAdd.length > 0){
    for(i = 0; i < data.length; ++i){
      if(data[i][0] == ""){break;}
    }
    SpreadsheetApp.getActiveSheet().getRange(12+i, 1, toAdd.length, 1).setValues(toAdd);
  } 

}

如果我使用上面的代码,我会收到此错误:

Cannot convert Array to Object[][]. (line 

我的addArray不是多维数组!我如何将它转换为多维数组,如下例所示我可以使用上面的代码?

多维数组示例:

var toAdd=[["red apple http://awebsite.com/1.jpg"],
               ["green apple http://1awebsite.com/2.jpg"],
               ["red apple http://1awebsite.com/3.jpg"],
               ["rotten apple http://rottenApple.com"]];

编辑:我在开始时转换了数组并且工作了!

var values_array=["red apple http://awebsite.com/1.jpg",
               "green apple http://1awebsite.com/2.jpg",
               "red apple http://1awebsite.com/3.jpg",
               "rotten apple http://rottenApple.com"];

  var toAddArray = [];
for (i = 0; i < toAdd.length; ++i){
    toAddArray.push([toAdd[i]]);
}
........... 

这样我将整个新数组插入到A列:

............
     SpreadsheetApp.getActiveSheet().getRange(12+i, 1, toAddArray.length, 1).setValues(toAddArray);
}

2 个答案:

答案 0 :(得分:6)

你需要&#34;转置&#34;数组。 您可以通过创建一个新数组并将值附加为具有一个值的数组来实现。

在调用setValues(toAdd)之前尝试

var toAddArray = [];
for (i = 0; i < toAdd.length; ++i){
    toAddArray.push([toAdd[i]]);
}

替换设定值调用
 SpreadsheetApp.getActiveSheet().getRange(12+i, 1, toAdd.length, 1).setValues(toAddArray);

设定值功能需要矩阵作为输入。由于没有原生矩阵,因此需要一个数组数组,其中每个子数组具有相同的长度且不包含数组 &#34;矩阵中的每个数组&#34;是一行,每个数组的每个元素都进入一列 如果您想要一维数组中的一列行,则需要一个具有单元素数组的数组。如果要编写列,则创建一个包含所有值的数组的数组。

答案 1 :(得分:2)

您从表格中收到的项目是不可变的,这就是您无法附加到它们的原因,但是您可以将值复制到新数组中并覆盖旧数组。但是,我会采用另一种方法解决这个问题,并将其打印到列的末尾,如下所示:

function appendToSheet() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('test'); // Get sheet so I don't have to retype it every time

  var toAppend = [['Append 1'],['Append 2']];                    // Note that this is an array of arrays.
  var newRow = sheet.getLastRow() + 1;                           // This fetches the number of the last row of the entire sheet and adds one to it.
  var endRange = lastRow + toAppend.length - 1;                  // Calculate the last row to append to

  sheet.getRange('A' + newRow + ':A' + endRange).setValues(toAppend); // Write to sheet.
}

但是如果你想在你的代码中使用工作表数组和附加数据我会这样做,我动态计算我需要的范围,只获取它,而不是获取整个工作表并使用的是:

function appendToValues() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('test');

  var lastRow = sheet.getLastRow();
  var valuesFromSheet =  sheet.getRange('A1:A' + lastRow).getValues(); // Get values from the sheet

  var toAppend = [['value 1'],['value 2']];

  var newArray = valuesFromSheet.concat(toAppend);                     // .concat() copies the old immutable array and makes a new one with the append array included. 
}