首页 > 解决方案 > 用于从文件夹中的所有工作表中获取唯一值的 Google Apps 脚本

问题描述

我想在 Google 表格中创建一个用于出席的主电子表格。同一文件夹中有许多其他工作表,我想从中提取唯一名称并将这些唯一名称保存在主电子表格中。此外,计算这些唯一名称的出现次数也是有益的。但我可以使用其他方法来实现这一点。

到目前为止,我找到了一个脚本,它从指定文件夹中的文件中收集了所有数据条目,但是我没有足够的 JS/Google Apps 经验来实现代码中等效的 UNIQUE 函数。

var spreadsheets = DriveApp.getFolderById("FOLDERID").getFilesByType(MimeType.GOOGLE_SHEETS);

  var data = [];
  while (spreadsheets.hasNext()) {
    var currentSpreadsheet = SpreadsheetApp.openById(spreadsheets.next().getId());
    data = data.concat(currentSpreadsheet.getSheetByName("Sheet1").getRange("RANGE").getValues());
  }

  SpreadsheetApp.
    getActiveSheet().
    getRange(1, 1, data.length, data[0].length).
    setValues(data);

所需设置的示例:

文件 1:

John Smith      EmailJS majorJS yearJS
James Johnson   EmailJJ majorJJ yearJJ
Monty Hall      EmailMH majorMH yearMH
Stephanie C.    emailSC majorSC yearSC
Martin R.       emailMR majorMR yearMR
Jack M.         emailJM majorJM yearJM

文件 2:

asa sd      dgdsv   yurntb  eryb
sdads       svgsdvf bhg     tdbs
gdfgd       sfvgs   g       tbht
jfsfsds     sfvgsd  fb      thdbt
sgsgs       sawetv4 tbh     rtrb
qssqws      qedw    qwqd    qdqwd

文件 3:(文件 1 的副本)

John Smith      EmailJS majorJS yearJS
James Johnson   EmailJJ majorJJ yearJJ
Monty Hall      EmailMH majorMH yearMH
Stephanie C.    emailSC majorSC yearSC
Martin R.       emailMR majorMR yearMR
Jack M.         emailJM majorJM yearJM

期望的输出:

Name            Email   Major   Year   Attendance
John Smith      EmailJS majorJS yearJS 2
James Johnson   EmailJJ majorJJ yearJJ 2
Monty Hall      EmailMH majorMH yearMH 2
Stephanie C.    emailSC majorSC yearSC 2
Martin R.       emailMR majorMR yearMR 2
Jack M.         emailJM majorJM yearJM 2
asa sd          dgdsv   yurntb  eryb   1
sdads           svgsdvf bhg     tdbs   1
gdfgd           sfvgs   g       tbht   1
jfsfsds         sfvgsd  fb      thdbt  1
sgsgs           sawetv4 tbh     rtrb   1
qssqws          qedw    qwqd    qdqwd  1

标签: google-apps-scriptgoogle-sheets

解决方案


我会这样做-

  1. 初始化一个空数组以保留为内存(“内存”)。

对于您拥有的每个源表中的每一行 -

  1. 使用四个字段形成一个数组('item');姓名、电子邮件、专业和年份。
  2. 使用 'memory'.includes('item') 方法在 'memory' 中找到 'item'
  3. 如果未找到,则将“项目”写入目标表,出勤率为“1”,并将“项目”推入内存阵列。
  4. 如果在 'memory' 中找到 'item',只需将目标工作表中该 'item' 的出勤率增加 1。您不需要第二次将其推送到 'memory' 数组中。

我相信还有比这更有效的方法。但我相信这会奏效。


推荐阅读