汇总来自多个工作表的数据

Summarizing data from multiple sheets

我有一个 google sheet 像这个例子来跟踪飞盘高尔夫的分数:

https://docs.google.com/spreadsheets/d/1uxDFXg2kivZWKICeVklugyXH1OWqsq_s5qXZYzgHkt8/edit?usp=sharing

它非常适合跟踪日常分数,但如果在开头有一个 sheet 可以说出每个人的总分,那就太棒了。另请注意,每个 sheet.

中的名称可能不相同

所以在这个例子中,我想要一个新的 sheet 来自动计算其他 sheet 的分数并显示:

Mike 67,71,65
George 83,70
Phillip 79,72,65
John 66,71
Henry 69

我对 excel 公式非常不熟悉,一直在努力开始。任何帮助将不胜感激。

您可以使用 Google Apps 脚本来完成您要查找的内容。该代码的想法是它将遍历您的 Spreadsheet 中的每个 Sheet,收集所有玩家及其所有值,最后创建一个摘要并将其放入 "Summary" sheet(sheet 必须存在于您的 Spreadsheet 中,名称必须完全相同):

function updateSummary() {
  var sheets = SpreadsheetApp.getActive().getSheets();
  var summarySheet = SpreadsheetApp.getActive().getSheetByName('Summary');

  var allScores = {};

  for (var i=0; i<sheets.length; i++) {
    if (sheets[i].getName() == 'Summary') continue;

    var nColumns = sheets[i].getLastColumn();

    var names = sheets[i].getRange(1, 1, 1, nColumns).getValues()[0];
    var scores = sheets[i].getRange(20, 1, 1, nColumns).getValues()[0];

    for (var j=0; j<nColumns; j++) {
      var currentName = names[j];
      var currentScore = scores[j];

      if (!allScores.hasOwnProperty(currentName))
        allScores[currentName] = [];

      allScores[currentName].push(currentScore);
    }
  }

  summarySheet.clear();

  for (var key in allScores) {
    var row = [key].concat(allScores[key]);
    summarySheet.appendRow(row);
  }
}

这将使用给定的数据在 "Summary" Sheet 中创建以下数据:

相反,如果您更喜欢在问题中描述的那样有两列(第二列包含用逗号分隔的每个分数),您只需将上面代码中的最后一个 for 循环替换为下一个:

for (var key in allScores) {
  var row = [key].concat(allScores[key].join(','));
  summarySheet.appendRow(row);
}

最后,您可以在 "Summary" sheet 中创建一个图像,它可以用作 运行 脚本的按钮。为此:

  1. 在您的 Sheet 中,单击插入>图像>图像 over 个单元格。

  2. Select任意图片。

  3. Select 新创建的图像,然后单击图像右上角出现的三点图标。

  4. 单击 "Assign script" 并输入函数名称(在本例中为 updateSummary),然后单击确定。

尝试:

=QUERY(TRANSPOSE({
 'MikeGeorgePhillipJohn 121519'!A1:D20, 
 'MikeGeorgePhillipJohn 122019'!A1:D20, 
 'MikeJosephPhillipHenry 122719'!A1:D20}), 
 "select Col1,sum(Col20)
  where Col1 is not null
  group by Col1
  label sum(Col20)''", 0)


=ARRAYFORMULA(SPLIT(TRANSPOSE(QUERY(QUERY(TRANSPOSE({
 'MikeGeorgePhillipJohn 121519'!A1:D20, 
 'MikeGeorgePhillipJohn 122019'!A1:D20, 
 'MikeJosephPhillipHenry 122719'!A1:D20}), 
 "select max(Col20)
  where Col1 is not null
  group by Col20
  pivot Col1", 0),,999^99)), " "))