質問者様にとってのベストアンサーにはならないとは思いますが、何ファイルもあるものを、人間がいちいち関数で書いていくっていうのが信じられないのと、見せるだけならともかく編集とか考えるとコピーとっていじりたいよねっていうのとがあるので、半分自己満足で。
A | B |
---|
スプレッドシート名1 | シート1 |
スプレッドシート名1 | シート2 |
スプレッドシート名2 | シート3 |
スプレッドシート名3 | シート4 |
みたいなコピーしてきたいリストを"シート1"として作っておいて下記のmain()を実行するとコピーできる。
コピーを手抜きしてcopyTo使っているので「シート1のコピー」になるし、シート名が重複していたら「シート1のコピー1」とかになっちゃうけどもまあこのくらいで。
javascript
1function main() {
2 var inputSheet = "シート1";
3 var self = SpreadsheetApp.getActiveSpreadsheet();
4 var lists = self.getSheetByName(inputSheet).getDataRange().getValues();
5 lists.shift();
6 lists.sort(function(first, second) {
7 if(first[0] > second[0]) { return 1; }
8 if(first[0] < second[0]) { return -1; }
9 if(first[1] > second[1]) { return 1; }
10 if(first[1] < second[1]) { return -1; }
11 return 0;
12 });
13 var ListObj = lists.reduce(function(prev, cur) {
14 if(cur[0] in prev) {
15 prev[cur[0]].push(cur[1]);
16 }else{
17 prev[cur[0]] = [cur[1],];
18 }
19 return prev;
20 }, {});
21 Object.keys(ListObj).forEach(function(element){
22 var srcSheet = getSpreadSheetByName(element);
23 if(srcSheet === undefined) { return; }
24 copySheets(self, srcSheet, ListObj[element]);
25 });
26}
27function getSpreadSheetByName(name) {
28 var files = DriveApp.getFilesByName(name);
29 while(files.hasNext()) {
30 var file = files.next();
31 if(file.getMimeType() === "application/vnd.google-apps.spreadsheet") {return SpreadsheetApp.openById(file.getId());}
32 }
33 return undefined;
34}
35function copySheets(destSpreadsheet, srcSpreadsheet, sheetNames) {
36 for(var i = 0; i < sheetNames.length; i++) {
37 var src = srcSpreadsheet.getSheetByName(sheetNames[i]);
38 if(src) {
39 src.copyTo(destSpreadsheet);
40 }
41 }
42}
43