汇总多张纸中的数据

时间:2019-12-25 07:43:01

标签: google-sheets google-sheets-formula transpose google-sheets-query google-query-language

我有一个像这样的示例的google工作表,用于跟踪光盘高尔夫的得分:

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

它对于跟踪日常成绩非常有用,但是在开始时只有一张纸可以说每个人的总成绩确实很棒。另外请注意,每张纸上的名称可能不同。

因此,在此示例中,我想要一个新的工作表,该工作表将自动从其他工作表计算分数并显示:

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

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

2 个答案:

答案 0 :(得分:3)

您可以使用Google Apps脚本来完成所需的操作。该代码的想法是,它将遍历电子表格中的每个工作表,收集所有参与者及其所有值,最后创建一个摘要,并将其放入“摘要”表中(该表必须存在于您的电子表格中,完全相同的名称):

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);
  }
}

这将使用给定的数据在“摘要”表中创建以下数据:

enter image description here

相反,如果您喜欢按照问题中的描述放置两列(第二列中的每个分数都用逗号分隔),则只需替换上面代码中的最后一个for循环即可:

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

最后,您可以在“摘要”表中创建图像,该图像可以用作运行脚本的按钮。为此:

  1. 在工作表中,单击“插入”>“图像”>“图像” 单元格上。

  2. 选择任意图像。

  3. 选择新创建的图像,然后单击该图像右上角显示的三个点图标。

  4. 单击“分配脚本”,然后输入函数名称(在这种情况下为updateSummary),然后单击“确定”。

答案 1 :(得分:2)

尝试:

=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)

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)), " "))

0