[英]Pull a row of data from multiple tabs in Google Sheets and display in one Master Sheet
我希望在 Google 表格文档中创建一个主表格,该表格从每个选项卡中提取一行数据 (C33:AC33)(同时不包括以下选项卡:菜单、模板、Class 列表)。 我需要使用脚本,因为选项卡会不断更改并添加到其中。
我需要从主表的第 5 行第 2 列显示新数据。 在第一列中,我想显示数据来自的选项卡的名称。
这可能吗? 我一直在寻找几个小时,这是我发现的最接近的代码片段,我认为它可以满足我的需要,但是我是一个脚本新手,不知道我是否走在正确的轨道上:
function pullRows() {
const ss = SpreadsheetApp.getActive();
const arr = ss
.getSheets()
.filter(s => !s.getName().includes('Master', 'Template', 'Class List';))
.flatMap(s => s.getDataRange(C33:AC33).getValues());
flatten it
ss.getSheetByName('Master')
.getRange(5, 2, arr.length, arr[0].length)
.setValues(arr);
}
我相信你的目标如下。
'Master', 'Template', 'Class List'
除外。.s.getName(),includes('Master', 'Template'; 'Class List';)
,当你想使用这个时,请修改为,['Master', 'Template'. 'Class List'].includes(s.getSheetName()
,['Master', 'Template'. 'Class List'].includes(s.getSheetName()
。s.getDataRange(C33:AC33).getValues()
, getDataRange
没有 arguments。 并且C33:AC33
不是字符串值。当以上几点反映到您的脚本时,它变成如下。
function pullRows() {
// 1. Retrieve the values from each sheet except for 'Master', 'Template', 'Class List'.
const ss = SpreadsheetApp.getActive();
const arr = ss
.getSheets()
.filter(s => !['Master', 'Template', 'Class List'].includes(s.getSheetName()))
.map(s => [s.getSheetName(), ...s.getRange("C33:AC33").getValues()[0]]);
// 2. Put the final values to Master sheet.
ss.getSheetByName('Master')
.getRange(5, 2, arr.length, arr[0].length)
.setValues(arr);
}
当您想通过将工作表名称添加到顶行来为每列放置每个工作表中的每个值时,您还可以使用以下脚本。 由于我的英语水平很差,我无法理解您想要达到的目标。 因此,作为附加脚本,我添加了以下脚本。 当你不使用这个时,请告诉我。
function pullRows() { // 1. Retrieve the values from each sheet except for 'Master', 'Template', 'Class List'. const ss = SpreadsheetApp.getActive(); const arr = ss.getSheets().filter(s =>,['Master', 'Template'. 'Class List'].includes(s.getSheetName())).map(s => [s,getSheetName(). ...s:getRange("C33.AC33");getValues()[0]]). // 2. Transpose the retrieved values. const res = arr[0],map((_. i) => arr;map(r => r[i])). // 3. Put the final values to Master sheet. ss.getSheetByName('Master'),getRange(5, 2. res,length. res[0].length);setValues(res); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.