現状と実現したい方法は以下になります。
勤怠管理用スプレッドシートがあり中に現在以下のシートがあります。
①Aシート-テンプレのシート
②Bシート-氏名(A列)、メールアドレス(B列)、各ユーザー用のスプレッドURL(C列)
②の各ユーザー用のスプシURLに①のコピーを作り、かつ編集権限を与えたいです。
検索して、それらしきもの2つを組み合わせて作りましたが、エラーが出ており、
原因がわからない状態です。
自分なりにわかるようにコードに説明を入れて調べていたのですが、詰まってしまい助言を頂けますと幸いです。
●エラー内容●
Exception: SpreadsheetApp オブジェクトでの openById メソッドまたはプロパティの取得中に予期しないエラーが発生しました。(行 18)
//☆Aシートがテンプレ、Bシートから編集権限やコピー先のスプレッドシートを指定すると宣言 function copy() { const curSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); const templateSheet = curSpreadsheet.getSheetByName("Aシート");//Nameの変更必要あり const copyList = curSpreadsheet.getSheetByName("Bシート").getDataRange().getValues();//Nameの変更必要あり copyList.shift(); //ヘッダ行を捨てる copyList.forEach(function(element, index, array){ //forEachでループ。elementが1行分 //☆C列のスプシIDの先にAシートをコピー // Bシートのスプレッドシートの3列目からをtargetURLとしておく const copysheet = curSpreadsheet.getSheetByName("Bシート") var targetURL = copysheet.getRange(2, 3).getValue(); if (targetURL == '') //セルが空白の場合はスキップ var strgoogle = 'https://docs.google.com/spreadsheets/d/'; //URLの固定部 var targetId = targetURL.replace(strgoogle, ''); //スプレッドシートのID部を取得 //ID指定でスプレッドシートを開き、指定のシートを取得 var targetSS = SpreadsheetApp.openById(targetId); // 上記で取得したシートを、そのスプレッドシートにコピー const copied =templateSheet.copyTo(targetSS); copied.setName("Aシート"); //デフォルトで「Aシートのコピー」とかになるのでリネーム //☆B列のメールアドレスの人へ編集権限を与える const users = element.slice(1).filter(String); // B列以降で文字になるやつだけフィルタ,URLでもIDでもOK file.addEditors(users);//B列の人に編集権限を与える ; })}
回答1件
あなたの回答
tips
プレビュー