将2d数组移动到电子表格

时间:2016-10-18 15:35:03

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

如何在Google脚本中使用二维数组并将整个内容推送到电子表格中的范围?

这就是我所拥有的:

假设数组已创建并已填充,并且具有6000多行和4列。

以下代码给出了不正确的范围错误。

  

不正确的范围宽度为0但应为4(第56行,文件“代码”):

formatted.getRange(1,1,targetArray.length,targetArray[0].length).setValues(targetArray);

以下代码功能但超时,因为数据集太大:

for(var i=0; i<formattedSheetLength; i++)
    formatted.getRange(i+1, 1, 1, 4).setValues([targetArray[i]]);

1 个答案:

答案 0 :(得分:1)

编辑备注:由于OP注释,原始代码已更改。

简短回答

尝试

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  // Create a jagged array for demonstration purposes 
  var targetArray = [
    [1,2],
    [1],
    [1,2,3],
    [1]
  ];

  /**
   * These two loops are safe because they don't make calls to 
   * the SpreadsheetApp service.
   */

  var height = targetArray.length;
  //Check the max width.
  var width = 0; 
  for(var i = 0; i < height; i++){
    width = Math.max(width,targetArray[i].length);
  }
  //Add the required empty values to convert the jagged array to a 2D array
  var temp;
  for(var i = 0; i < height; i++){
    temp = targetArray[i].length;
    for(var j = 0; j < width - temp; j++){
      targetArray[i].push('');
    }
  }
  /**
   * Send values to the spreadsheet in a single call
   */
  var range = sheet.getRange(1,1,height,width).setValues(targetArray);
}

解释

根据错误消息,targetArray[0].length正在返回0。我们可以假设targetArray是一个锯齿状数组而不是2D数组。为了避免使用硬编码宽度,上面的代码作为如何将锯齿状数组转换为2D数组的示例。

代码有两个可以安全使用的循环,因为它们不会调用Google Apps脚本服务。