使用google脚本将2列放入一个多维数组中

Use google script to put 2 columns into a single multi dimensional array

本文关键字:一个 数组 脚本 google 2列 使用      更新时间:2023-09-26

我正在寻找一种方法,在谷歌电子表格中采取2列,并将它们合并成一个数组,希望我可以采取这2列,并在一个新的工作表上使用setValues

为什么?

我最终采取2个不同的表,基本上做一个大规模的vlookup和转移所有的结果和所需的列到一个单一的,新的表。我可以得到完整的dataRange,循环遍历每个数组,获取我想要的值并将它们推入一个新数组。但是有没有更简单的方法呢?如果我能遍历第一行,得到标题和它们的索引,我能把所有的A列和D列放到一个多维数组中吗?

Header1 | H2 | H3

我想要H1和H3和它们的行,这样我就可以把它们放到一个新的工作表中,像

多维数组:

[[H1, H3], [dataH1,dataH3]]

当前代码
  var freqArr = new Array(); //Array with sheet data
  var myArray = new Array(); //Blank array to house header index
  var freqSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('KEY_test_test');
  var freqData = freqSheet.getDataRange(); //all data
  var freqNumRows = freqData.getNumRows(); //number of rows
  var freqNumCol = freqData.getNumColumns(); //number of columns
  freqArr = freqSheet.getRange(1, 1, freqNumRows, freqNumCol).getValues();
  for (i = 0;i<1;++i){
    for (j = 0;j<freqNumCol;++j){
      if (freqArr[i][j].toString() == 'Header1' || freqArr[i][j].toString() == 'Header3'){
      myArray.push([j]);
      }
    }
  }
  Logger.log(myArray);

Where I' s Stuck

我现在正在做的是通过第一行循环获得我想要的标题索引(应该看起来像这个[ 0, 2 ]),但所有在我的日志中返回的是[]。我计划使用这个索引数组循环遍历freqData并获取每个嵌套数组的索引。

任何建议都会很好。我刚刚开始学习谷歌脚本,我正在自学。由于

UPDATE TO CODE:

事实证明,.toString() == 'Header1'不会返回匹配,但经过更多的谷歌fu,我发现.toString().match('Header1') == 'Header1'将返回我需要的。

更新见下文
  var freqArr = new Array(); //Array with sheet data
  var myArray = new Array(); //Blank array to house header index
  var freqSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('KEY_test_test');
  var freqData = freqSheet.getDataRange(); //all data
  var freqNumRows = freqData.getNumRows(); //number of rows
  var freqNumCol = freqData.getNumColumns(); //number of columns
  freqArr = freqSheet.getRange(1, 1, freqNumRows, freqNumCol).getValues();
  for (i = 0;i<1;++i){
    for (j = 0;j<freqNumCol;++j){
      if (freqArr[i][j].toString().match('Header1') == 'Header1' || freqArr[i][j].toString().match('Header3') == 'Header3'){
      myArray.push(j);
      }
    }
  }
  Logger.log(myArray);

将返回[ 0.0 , 2.0 ]

但是,我的问题仍然存在,是否有一种更快的方法来获得2(n)列不是并排并将它们放入数组中,以便您可以使用.setValues ?

答案

但是,我的问题仍然存在,是否有一种更快的方法来获得2(n)列不是并排并将它们放入数组中,以便您可以使用。setvalues ?

是的,有很多方法。其中之一是使用JavaScript方法:array.prototype.forEach()

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var array = [];
  data.forEach(function(row){
      array.push([row[0],row[5]]);
    });
  sheet.getRange(1,10,array.length,2).setValues(array);
}
<标题>

获取活动表单

  var sheet = SpreadsheetApp.getActiveSheet();

获取sheet

上的所有值
  var data = sheet.getDataRange().getValues();

初始化一个变量来保存数组

  var array = [];

获取第一列和第六列(A和F)的值(从零开始的索引)

  data.forEach(function(row){
      array.push([row[0],row[5]]);
    });

返回从J1开始到K列和所需行(基于一个索引)结束的值

  sheet.getRange(1,10,array.length,2).setValues(array);

看看简单邮件合并教程中的getRowsData()函数。它将获取表格中的所有数据并将其作为对象返回。然后您可以访问myData[i].header1数据,它将删除空格并"规范化"标题。例如我的标题名称将是myData[i].myHEaderName

如果您愿意,可以将返回的数据限制为仅需要的列。