google-apps-script - GAS - 根据列表获取二维数组中的某些列
问题描述
我正在尝试通过按特定顺序获取某些列来使用 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 循环。
关于如何完成这项工作的任何想法。
解决方案
尝试使用循环先组合数据然后返回。还在customArray
.
代码:
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;
}
粘贴:
测试表:
执行后粘贴工作表buildArray
:
推荐阅读
- vba - 找不到 ParamArray 的元素零的行
- angular - 子组件以父形式 angular 4/5 返回 null
- c++ - 用于 wasm 的 Qt:错误:使用未声明的标识符“QThreadPool”
- python - iframe 请求下载 PDF 内容并在 IE 中显示不工作
- python - Python子进程刷新标准输出
- r - 用ggplot连接极坐标图中的起点和终点,保持观察的位置
- angular - Angular中有没有办法使用延迟加载的编译模块
- reactjs - 弹出框上的自动对焦功能
- php - 如何使用 Telegram Bot API 获取超级群聊中用户的加入日期?PHP
- c# - 在 function.json 中参数化 runOnStartup