繁体   English   中英

从 Google 表格的多个选项卡中提取一行数据并显示在一个主表格中

[英]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);
}

我相信你的目标如下。

  • 您想从工作表中检索单元格“C33:AC33”的值,但'Master', 'Template', 'Class List'除外。
  • 您想将值放入“主”表。 在这种情况下,您希望通过将工作表名称添加到顶列来为每一行放置每个工作表中的每个值。
  • 您想从单元格“B5”中输入这些值。

修改点:

  • 关于.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不是字符串值。
  • 在这种情况下,我想提出以下流程。
    1. 从除“Master”、“Template”、“Class List”之外的每张工作表中检索值。
    2. 将最终值放入主表。

当以上几点反映到您的脚本时,它变成如下。

修改后的脚本:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM