質問: SpreadsheetApp.create(objArray[i][0]) //SS権限付与1 if(objArray[i][1]){ mySS.addCollaborator(objArray[i][1]); } //SS権限付与2 if(objArray[i][2]){ mySS.addCollaborator(objArray[i][2]); } //SS権限付与3 if(objArray[i][3]){ mySS.addCollaborator(objArray[i][3]); } //SS_URL転記 sheet.getRange(i + 1 ,5).setValue(mySS.getUrl()); } } ```
回答: * "Aシート" →コピーするやつ * "Bシート" | 名前 | 権限1 | 権限2 | | --- | --- | --- | | こぴーぶっく | someone@gmail.com | | | こぴーせいきゅうしょ | someone@gmail.com | sometwo@gmail.com | のとき`copy()`を実行すれば、こぴーぶっくにsomeoneの編集権が、こぴーせいきゅうしょにsomeoneとsometwoの編集権が付与された状態で、いずれにもAシートというシートがコピーされ、かつそれが唯一のシートとなって、生成される。 あとはがんばれ。 ``` function copy() { const curSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); const templateSheet = curSpreadsheet.getSheetByName("Aシート"); const copyList = curSpreadsheet.getSheetByName("Bシート").getDataRange().getValues(); copyList.shift(); //ヘッダ行を捨てる copyList.forEach(function(element, index, array){ //forEachでループ。elementが1行分 const fileName = element[0]; // A列にファイル名 const file = SpreadsheetApp.create(fileName); const users = element.slice(1).filter(String); // B列以降で文字になるやつだけフィルタ file.addEditors(users); const copied = templateSheet.copyTo(file); //copyToすると、コピーしたシートが返り値になる copied.setName("Aシート"); //デフォルトで「Aシートのコピー」とかになるのでリネーム trimSheet(file, "Aシート"); }); } function trimSheet(spreadsheet, name) { //スプレッドシートを作ると「シート1」ができちゃうので、指定した名前(name)を持たないシートを消すやつ spreadsheet.getSheets().filter(function(sheet){ return sheet.getName().indexOf(name) === -1}).forEach(function(sheet){spreadsheet.deleteSheet(sheet);}); } ```