【问题标题】:How to append array data to spreadsheet column at once using Google Script?如何使用 Google Script 一次将数组数据附加到电子表格列?
【发布时间】:2015-10-24 01:36:34
【问题描述】:

我正在尝试一次将 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);
}

【问题讨论】:

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


    【解决方案1】:

    您需要“转置”数组。 您可以通过创建一个新数组并将值作为具有一个值的数组附加来做到这一点。

    在调用 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);
    

    设置值函数需要一个矩阵作为输入。由于没有原生矩阵,它需要一个数组数组,其中每个子数组的长度相同且不包含数组。
    “矩阵”中的每个数组都是一行,每个数组的每个元素都进入一列。
    如果您想要一维数组中的一列行,则需要一个包含一元素数组的数组。如果你想写列,你可以创建一个包含所有值的数组。

    【讨论】:

    • 谢谢我必须把你上面的代码放在 var values_array=[....];并像魅力一样工作!
    【解决方案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. 
    }
    

    【讨论】:

      猜你喜欢
      • 2021-07-28
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 2017-06-05
      • 2018-07-23
      • 1970-01-01
      相关资源
      最近更新 更多