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

Gra*_*ant 0 javascript arrays google-sheets google-apps-script

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

为什么?

我最终会使用 2 个不同的工作表,并且基本上进行了大规模的查找,并将所有结果和所需的列传输到一个新的工作表中。我可以得到完整的dataRange,循环遍历每个数组,获取我想要的值并将它们推送到一个新数组。但是有没有更简单的方法呢?如果我只能查看 row1 并获取标题及其索引,我是否可以将所有列 A 和列 D 放入多维数组中?

例子

标题1 | H2 | H3

我想要 H1 和 H3 以及它们的行,这样我就可以将它们放在新的工作表中

多维数组:

[ [H1, H3], [数据H1,数据H3] ]

当前代码

  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);
Run Code Online (Sandbox Code Playgroud)

我被困在哪里

我现在正在做的是遍历第一行以获取我想要的标题索引(应该如下所示[ 0, 2 ]),但我的日志中返回的所有内容都是 []。我计划使用这个索引数组来遍历我的freqData并获取每个嵌套数组的索引。

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

更新代码:

事实证明,.toString() == 'Header1'不会返回匹配项,但经过更多的 google 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);
Run Code Online (Sandbox Code Playgroud)

会回来[ 0.0 , 2.0 ]

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

Rub*_*bén 6

回答

但是,我的问题仍然存在,是否有更快的方法来获取 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);
}
Run Code Online (Sandbox Code Playgroud)

解释

获取活动工作表

  var sheet = SpreadsheetApp.getActiveSheet();
Run Code Online (Sandbox Code Playgroud)

获取所有的值 sheet

  var data = sheet.getDataRange().getValues();
Run Code Online (Sandbox Code Playgroud)

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

  var array = [];
Run Code Online (Sandbox Code Playgroud)

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

  data.forEach(function(row){
      array.push([row[0],row[5]]);
    });
Run Code Online (Sandbox Code Playgroud)

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

  sheet.getRange(1,10,array.length,2).setValues(array);
Run Code Online (Sandbox Code Playgroud)