Google Apps脚本可从文件夹中的所有工作表中获取唯一值

时间:2019-05-05 21:32:45

标签: google-apps-script google-sheets

我想创建一个主电子表格来参加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

1 个答案:

答案 0 :(得分:0)

我会这样-

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

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

  1. 使用四个字段形成一个数组(“项目”);名称,电子邮件,专业和年份。
  2. 使用'memory'.includes('item')方法在'memory'中查找'item'
  3. 如果未找到,则将出席人数为“ 1”的“ item”写入目的地表,然后将其放入内存阵列。
  4. 如果在“内存”中找到“项目”,只需将目标表中该“项目”的出勤率增加1。您无需再次将其推入“内存”数组。
  5. li>

我敢肯定还有比这更有效的方法。但是我相信这会起作用。