今回はGoogleDriveにあるファイルとフォルダの取得を行なってみたいと思う。
この操作ができるようになると、以下の様な事ができるようになる。
1、任意のファイルを定期的にバックアップ取る
2、対象のフォルダをテンプレートとして、新規にファイルを作成
3、フォルダ別に存在するファイルの管理
ファイル一覧の取得
function allFiles(){
var files = DriveApp.getFiles();
while (files.hasNext()) {
var file = files.next();
Logger.log(file.getName());
}
}
フォルダ一覧の取得
function dirs(){
var dirs = DriveApp.getFolders();
while (dirs.hasNext()) {
var dir = dirs.next();
Logger.log(dir.getName());
}
}
個別ファイルにアタッチしてコピーしてフィアル名を変更する
SpreadSheet
Document
var doc = SpreadsheetApp.openByUrl("https://docs.google.com/document/d/1rwj4njE99NVweSFnJdb0IfbYev3-QW06rBCt4bA-BWM/edit");
//var doc = SpreadsheetApp.getActiveSpreadsheet();
var file = DriveApp.getFilesByName(doc.getName());
var copy = file.next().makeCopy();
copy.setName("test-copy");
Logger.log(copy.getName());
Document
var doc = DocumentApp.openByUrl("https://docs.google.com/document/d/1rwj4njE99NVweSFnJdb0IfbYev3-QW06rBCt4bA-BWM/edit");
//var doc = DocumentApp.getActiveDocument();
var file = DriveApp.getFilesByName(doc.getName());
var copy = file.next().makeCopy();
copy.setName("test-copy");
Logger.log(copy.getName());
個別ファイルを取得する場合は、ファイル一覧やファイル名から複数取得してloopさせて判定する方法もあるが、スプレッドシートやドキュメントを直接指定もできる。
URLとIDの2パターンで取得できるので、それをDriveAppでファイルにもどすが、この際にどうしても名前で判定しなくてはいけない。
今回はファイル名がユニークになっている事が前提のプログラムになっているので、GoogleDriveを使う際に規則を作ってから行うことをオススメしたい。
企業でGoogleAppsを使っている場合
無料のGmailを使っている人は上記のプログラムが問題なく動作すると思いますが、企業番の有料GoogleAppsを使っている場合、セキュリティ保護の為、管理設定で「GoogleDriveで他のアプリケーションのインストールを許可する」という設定をOFFにしているパターンが多いそうだ。
僕の会社でも同じ状態で、情報システム担当に言っても、このポリシーは変更するのが難しいようだ。
ちなみに、Googleのサポート掲示板の返答でも、説明されている。
https://groups.google.com/forum/#!topic/google-apps-api-japan/NZA3DIe9RL4
個人的にはGoogleの設定を変更されるのが一般的ではないかと思う。
そもそもアプリケーションのインストールとGoogleDriveが紐付いているのが、ユーザー側としてアーキテクチャが理解できない。
即刻、Driveとアプリ―ケーションの切り離しを行なっていただき、GoogleAppsScript側からDriveAppのアクセスをデフォルトで可能にしてもらいたい。
そして、next()などで別アプリの場合に、アクセス拒否したりするような仕様が一般的だろう。
0 件のコメント:
コメントを投稿