前提・実現したいこと
日報の作成コード及び日付の記入コード自体は作成しましたが、トリガーを使って毎月に日報を作成する際に、作成された日報の方で日付の記入コードを実行しなければなりません。
そのため、2つのコードを1つにまとめて、毎月の初日に1回のみ実行する形を取りたいです。
しかし、新しく作成したファイルが上手く取得できず、困っています。
該当のソースコード
日報の作成コード
GAS
1var FOLDER_ID = '日報の作成先フォルダ'; 2 3function creatSS() { 4 var templateFileId = '日報のテンプレ'; 5 var date = new Date 6 var year = date.getFullYear(); 7 var month = date.getMonth(); 8 var month = month+1 //1月は0のため、+1 9 var sheetName = '日報_' +year+"年"+ month + '月'; //日報の名前を年月で作成 10 11 var filename = SpreadsheetApp.openById(templateFileId).copy(sheetName).getId() 12 var fileSS = DriveApp.getFileById(filename) 13 var folderTarget = DriveApp.getFolderById(FOLDER_ID); 14 folderTarget.addFile(fileSS) 15 DriveApp.getRootFolder().removeFile(fileSS); //ファイルをコピーする際に、マイドライブの方にもコピーが作成されるため、それを削除 16 17}
自動的に日付を記入するコード
GAS
1function setdate() { 2 3var sheet = SpreadsheetApp.getActiveSheet(); 4var lastC = sheet.getLastColumn(); 5 6var d = new Date(); 7//var year = d.getFullYear(); 8var month = d.getMonth() + 1; 9var day = d.getDate(); 10var day = 1 11var newD = month+"月"+day+"日" 12 13for(var i = 3; i <= lastC; i++) { //C行から最終行まで日付を記入 14 sheet.getRange(1, i).setValue(newD); 15 var day = day+1 16 var newD = month+"月"+day+"日" 17 } 18}
試したこと
GAS
1folderTarget.addFile(fileSS)
このコードを実行する際に、folderTarget.addFile(fileSS).getId()をして、SpreadsheetApp.openById(id)で日付を記入するコードを実行するように書き換えてみましたが、idが上手く取得できませんでした。
回答を頂いた後にアレンジしたコード
GAS
1var FOLDER_ID = 'コピーするフォルダ'; 2function creatSS() { 3 var templateFileId = 'テンプレのリンク'; 4 var newdate = Utilities.formatDate(new Date(), "Asia/Tokyo", 'yyyy/MM'); 5 var sheetName = '日報'+newdate; 6var ss = SpreadsheetApp.openById(templateFileId).copy(sheetName); //スプレッドシート 7var file = DriveApp.getFileById(ss.getId()); //idを取得するタイミングを変更 8DriveApp.getFolderById(FOLDER_ID).addFile(file); //ファイルを移動 9DriveApp.getRootFolder().removeFile(file); //ルートフォルダのファイルを削除 10setdate(ss); //自動的に日付を記入するコードを実行 11 12} 13 14function setdate(ss) { 15 16 var sheet = ss.getActiveSheet(); //新しく作ったスプレッドシート 17 var month = new Date().getMonth()+1; 18 var newdays=[]; 19 if(month==2){ 20 var numofday=29 //numofdayは月の日数及び実行回数を設定するための変数、2月分はうるう年に対応して手動で設定 21 } 22 else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){ // 23 var numofday=31 24 25 } 26 else if(month==2||month==4||month==6||month==9||month==11){ 27 var numofday=30 28 29 } 30 var day =1 31 for(var i=1;i<=numofday;i++){ 32 var newD=month+'月'+day+'日'; // Utilities.formatDate(new Date()+i, "Asia/Tokyo", 'MM月dd日')を試してみましたが、エラーが出たため、このような書き方にしました。 33 newdays.push(newD); 34day=day+1; 35 } 36 for(var V = 1; V <= numofday; V++) { 37var lastC = sheet.getLastColumn(); 38sheet.getRange(3,1,newdays,1).setValues(newdays[V]); //setValuesの際にクラスを変換できないエラーが出ました。 39} 40}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/02 03:17
2019/09/03 04:46 編集
退会済みユーザー
2019/09/03 04:55
2019/09/03 16:47
退会済みユーザー
2019/09/04 04:49
2019/09/04 10:21 編集
退会済みユーザー
2019/09/04 23:31
2019/09/06 15:00
退会済みユーザー
2019/09/07 01:33