Google apps script GAS-基于列表获取二维数组中的某些列

Google apps script GAS-基于列表获取二维数组中的某些列,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我正试图通过按特定顺序获取特定列来使用Google sheet数据构建自定义数组。列/顺序在google工作表上设置。下面的内容是有效的,但我想让第11行的返回更加动态 function buildArray() { const s = SpreadsheetApp; const ss = s.getActiveSpreadsheet(); const sheet = ss.getSheetByName('Test Sheet'); const pasteSheet = ss.g

我正试图通过按特定顺序获取特定列来使用Google sheet数据构建自定义数组。列/顺序在google工作表上设置。下面的内容是有效的,但我想让第11行的返回更加动态

function buildArray() {
  const s = SpreadsheetApp;
  const ss = s.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('Test Sheet');
  const pasteSheet = ss.getSheetByName('Paste');
  const data = sheet.getRange(1,1,10,10).getValues(); //update range
  // const headers = pasteSheet.getRange(1,1,pasteSheet.getLastRow(),1).getValues().map(function(r){return r}).flat(Infinity); //list of headers needed in 1d array
  const colNeed = [0,9,5,6,4,7]; //array index for column numbers

  var customArray = data.map(function(r){ 
    return [r[0], r[9], r[5], r[6], r[4], r[7]]; //Would like to make this more dynamic
  })
  
  debugger;
  pasteSheet.getRange(1, 2, pasteSheet.getLastRow(), pasteSheet.getLastColumn()).clear();
  pasteSheet.getRange(1, 2, customArray.length, customArray[0].length).setValues(customArray);
  debugger;
}
我尝试过用r[colNeed.map(…)]替换r[0]和for循环,但没有成功

关于如何使这项工作的任何想法

这是最后一页的截图。 我只是复制/粘贴了第一列(A)中的标题名称,以确保正确的列被拉/粘贴。

首先尝试使用循环组合数据,然后返回。还添加了
customArray
顶部的标题

代码: 粘贴:

测试表:

执行
buildArray
后粘贴工作表:

function buildArray() {
  const s = SpreadsheetApp;
  const ss = s.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('Test Sheet');
  const pasteSheet = ss.getSheetByName('Paste');
  const data = sheet.getRange(1,1,10,10).getValues(); // update range
  // get headers as single array (excluding blank cells)
  // since last column of data can go beyond last row of column A
  // headers can include blank cells if there is already data present
  const headers = pasteSheet.getRange(1,1,pasteSheet.getLastRow(),1).getValues().flat().filter(Boolean); 
  // array index for column numbers
  const colNeed = [0,9,5,6,4,7]; 

  var customArray = data.map(function(r){ 
    var output = [];
    colNeed.forEach(function (col){
      output.push(r[col]);
    });
    return output;
  });

  // Add headers at the first element of customArray
  customArray.unshift(headers)

  debugger;
  pasteSheet.getRange(1, 2, pasteSheet.getLastRow(), pasteSheet.getLastColumn()).clear();
  pasteSheet.getRange(1, 2, customArray.length, customArray[0].length).setValues(customArray);
  debugger;
}