
【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とかについても詳しく載っています。まだ知らない事がたくさんあります。