見出し画像

【GAS】Google Apps Script 活用事例 特定フォルダに格納されているファイルのオーナー権限を一括で譲渡するスクリプト

転職先が決まり、退職する事が決まりました。

長かった.....。第一志望の会社には最終面接で、落選してしまったものの、コロナショックの中、1社から内定をもらう事が出来ました。障害者枠なので、非正規の契約でのスタート。正社員採用ではないので、契約が続くかどうかヒヤヒヤしながら、当分は過ごす事になりそうですが、それでも、現職で働き続けたくなかったため、自分の意思決定を尊重したいと思います。

そこで、今回は、退職するにあたって、スクリプトで、自分がオーナー権限を持っているファイルを他人に写す方法を書いてみました。

オーナ権限を移す方法

//オーナー権限を移す
function takeOverFile() {

 const folderId     = getFolderId();
 const folder       = DriveApp.getFolderById(folderId);
 const emailAddress = 'sample@gmail.com';
 const files        = folder.getFiles();
 
 console.log(files);
 
 
 while (files.hasNext()) {
   const file     = files.next();
   const fileId   = file.getId();
   file.setOwner(emailAddress).setDescription('一括で、オーナー権限を移すテスト');
 }
}


function getFolderId() {
 
 const ui = SpreadsheetApp.getUi();
 const response = ui.prompt(
   'フォルダのURLを入力してください。',
   '(例)https://drive.google.com/drive/folders/************',
   ui.ButtonSet.OK
 );
 
 const inputName = response.getResponseText()
 .replace('https://drive.google.com/drive/folders/','')
 .replace('https://drive.google.com/drive/u/0/folders/','')
 .replace('https://drive.google.com/drive/u/1/folders/','');
 
 console.log(inputName);
 
 switch (response.getSelectedButton()) {
   case ui.Button.OK:
     console.log('%s と入力され、OKが押されました。',inputName);
     
     break;
     
   case ui.Button.CLOSE:
     console.log('閉じるボタンが押されました。');
     
 }//switch
 
 return inputName;
}

閲覧とか共有なんかもスクリプトで出来る

設定されているトリガーを調べる方法

function getTrigger() {
 const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
 const triggers    = ScriptApp.getProjectTriggers();
 
 console.log('現在のプロジェクトのトリガーは、' + triggers.length + ' 個、設定されています。');
 
 for(const trigger of triggers){
 
   //function名が表示される。
   console.log(trigger.getHandlerFunction());
   
   //トリガーのタイプを調べる
   if (trigger.getTriggerSource() == ScriptApp.TriggerSource.CLOCK) {
     console.log(trigger.getUniqueId() + " source is clock");
   } else if (trigger.getTriggerSource() == ScriptApp.TriggerSource.SPREADSHEETS) {
     console.log(trigger.getUniqueId() + " source is spreadsheets");
   }
   
 }//for
}//end

余談、ちなみにトリガーの設定も出来るらしい

function createTimeDrivenTriggers() {


 // 6時間ごとに、myFunctionが動作するようにトリガーを設定する。
 ScriptApp.newTrigger('myFunction')
     .timeBased()
     .everyHours(6)
     .create();

 // 毎週 月曜 AM 9:00 - AM 10:00になったら、myFunctionが動作するように、トリガーを設定する。
 ScriptApp.newTrigger('myFunction')
     .timeBased()
     .onWeekDay(ScriptApp.WeekDay.MONDAY)
     .atHour(9)
     .create();
     
 // Spreadsheetの起動時に、トリガーを設定する
 const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
 ScriptApp.newTrigger('onOpen')
 .forSpreadsheet(spreadsheet)
 .onOpen()
 .create()
     
}

特定の日に、トリガーが発動するように設定する。

atDate()と、atHour()の併用は、2020年7月現在、出来ないようです。
このスクリプトを実行すると、実行時刻は、真夜中の00:00になっています。

2021/01/30 追記
下記のスクリプトを月末付近に実行すると、翌月の判定が上手くいかない事があります。2月は28日しかないため、翌月が3月になってしまいます。

function createNewTriggers() {
 const date = new Date();
 date.setMonth(date.getMonth() + 1);

 const nextMonth = Utilities.formatDate(date, 'JST', 'MM');
 const thisYear  = date.getFullYear();
 console.log(thisYear);

 //翌月の1日にトリガーを設定する。
 const onChangeTrigger = ScriptApp.newTrigger('myFunction')
 .timeBased()
 .atDate(thisYear, nextMonth, 1)
 .create();

}

Google Formsの受付を、特定時刻になったら終了する。

トリガーの削除。これ、割と使える!!

function deleteTrigger() {
 const triggers = ScriptApp.getProjectTriggers();
 for (let i = 0; i < triggers.length; i++) {
   ScriptApp.deleteTrigger(triggers[i]);
 }//for
}

引継関係のスクリプトで出来たら良いなと思ったのが、設定済みのトリガーの情報をそのままコピーして、他人に移す方法が無いか模索したのですが、ちょっと分からずじまいでした.....。無念.....。

上記の場合は、一度トリガーを削除して、改めてトリガーを設定するスクリプトを、移したい人に実行してもらう以外は、現状無いようですね。addFile()とかremoveFile()と同じようなイメージ

Available types of triggers

これ読んでみると、このブログでも何となくで使っていたonOpenとかについても詳しく載っています。まだ知らない事がたくさんあります。


この記事が気に入ったらサポートをしてみませんか?