前提・実現したいこと
GASでコピーした新しいスプレッドシートの中で、新シートを作成したい。
たとえば、「templete」というスプレッドシートを複製して、「202008」というスプレッドシートを作成しようとしてます。
その「202008」というスプレッドシートの中にある、各曜日用のテンプレートシートを、
曜日に合わせて複製して、「0801」から「0831」まで作成しようとしてます。
発生している問題・エラーメッセージ
複製したスプレッドシートを操作できずに困っています。
TypeError: duplicatedSS.getSheetByName is not a function(行 36、ファイル「createSheet」)表示しない ▼ログです [20-09-02 04:22:52:590 PDT] {} [20-09-02 04:22:52:685 PDT] 01 [20-09-02 04:22:52:696 PDT] Sat Aug 01 2020 00:00:00 GMT+0900 (日本標準時) [20-09-02 04:22:52:701 PDT] TypeError: duplicatedSS.getSheetByName is not a function at createSheet(createSheet:36:44) at myFunction(main:4:5)
該当のソースコード
★★ここで他のスプレッドシートのセルに記載されているデータから作成したい「月」を取得 function getMakingMonth() { const ss = SpreadsheetApp.openById(スプレッドシートID); const sheet = ss.getSheetByName(シート名); const range = sheet.getRange(セル名).getValue(); var shiftDate = new Date(range); var month = ("0" + (shiftDate.getMonth() + 1)).slice(-2); return month; } ★★ここで他のスプレッドシートのセルに記載されているデータから作成したい「年」を取得 function getMakingYear() { const ss = SpreadsheetApp.openById(スプレッドシートID); const sheet = ss.getSheetByName(シート名); const range = sheet.getRange(セル名).getValue(); var shiftDate = new Date(range); var year = shiftDate.getFullYear(); return year; } ★★ここでテンプレートをコピー function copyTemplete(){ var makingMonth = getMakingMonth(); var makingYear = getMakingYear(); var templeteFile = DriveApp.getFileById(ファイルID); var OutputFolder = DriveApp.getFolderById(ディレクトリID); +Utilities.formatDate(new Date(), 'JST', 'yyyyMM'); var OutputFileName = templeteFile.getName().replace(元スプレッドシート名, 新スプレッドシート名 + makingYear + makingMonth); templeteFile.makeCopy(OutputFileName, OutputFolder); } ーーーーー▼別ファイル▼ーーーーー ★★ここで他のスプレッドシートのセルに記載されているデータから作成したい「年月」を取得し、Dateオブジェクトからその月の最終日を取得(作成するシートの枚数を決めるため) function findLastDays() { var year = getMakingYear(); var month = getMakingMonth(); var lastDay = new Date(parseInt(year, 10), parseInt(month, 10), 0).getDate(); return lastDay; } ★★ここで複製したスプレッドシートを操作して、シートを複製しようとしてます。 function createSheet() { var year = getMakingYear(); var month = getMakingMonth(); <▼▼問題とおもっている箇所> var duplicatedSS = DriveApp.getFolderById(フォルダID); var file = duplicatedSS.getFilesByName('業務管理シート_' + year + month); console.log(file); <▲▲問題とおもっている箇所> var lastDay = findLastDays(); for (var i = 1; i <= lastDay; i++) { var day = ("00" + i).slice(-2); var date = new Date(`${year}/${month}/${day}`); console.log(day); console.log(date); if (date.getDay() == 0 || date.getDay() == 6) { var tempWESheet = duplicatedSS.getSheetByName(コピーしたファイルの中のシート名); var copiedSheet = tempWESheet.copyTo(duplicatedSS); copiedSheet.setName(year + month + i); } else if (calJa.getEventsForDay(date).length > 0) { return; } else { return; } } }
スタンドアロン型です。
main.gsで
copyTempleteメソッドを実行してテンプレートは作成されたあと、
createSheetメソッドを実行して複製したテンプレートの中から該当するシートを複製しようとしてます。
繰り返しで恐縮ですが、やりたいことは、
たとえば、「templete」というスプレッドシートを複製して、「202008」というスプレッドシートを作成しようとしてます。
その「202008」というスプレッドシートの中にある、各曜日用のテンプレートのシートを、
曜日に合わせて複製して、「0801」から「0831」まで作成しようとしてます。
問題点と思っている箇所なのですが、
1行目のログがconsole.log(file)の箇所なのですが、
こちらが空のため取得出来ていないのだと思いました。
いろいろと調べてみたのですが、解決策が見つかりませんでした。
申し訳ございませんが、アドバイスなどいただけましたら幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/03 11:17 編集
2020/09/03 23:05
2020/09/04 09:31 編集