« 2013年2月 | トップページ

2020年4月

2020年4月20日 (月)

google script 入門 (google drive内のファイル&フォルダ一覧)

今日は、google drive内の「ファイルとフォルダの一覧表」を作成するスクリプトについて書きます。
記載したスクリプトは2つです。
1つ目は、指定したフォルダより「下層に存在するファイルとフォルダ」をリストアップするものです。
2つ目は、「自分のgoogle ドライブ内の全てのファイルとフォルダ」  をリストアップするものです。

 

google スクリプトを初めて動かす方は初めに以下も読んでみて下さい。
 ・google script 入門 (スプレットシートに "Hello World" を表示するまで)

 

■結果
 ここに記載したスクリプトで得られる一覧表の例を下図に示します。20200420b

 

■スクリプト1
 「指定したフォルダ」より「下層に存在するファイルとフォルダ」をリストアップするスクリプトを示します。

 「google drive のフォルダ」を示すURL(下図の"???????????"の部分) は、自分のものに変更してください。

 

function myFunction() {  
// googleドライブのフォルダを示す URL。ブラウザのURLのコピペ
const url = 'https://drive.google.com/drive/u/0/folders/1???????????'
let paths = url.split('/')
let folderId = paths[paths.length - 1]
let folder = DriveApp.getFolderById(folderId)
let aFolder = []
let aFile = []
scan(folder, aFolder,aFile)
printSheet(aFolder, 1)
printSheet(aFile, 5)
}
function scan(folder,aFolder,aFile){
aFolder.push(folder)
let p = folder.getFiles()
while(p.hasNext()) {
aFile.push(p.next());
}
p = folder.getFolders()
while(p.hasNext()) {
scan(p.next(), aFolder, aFile)
}
}
/*
* google スプレッドシートにファイル一覧を表示
*/
function printSheet(files, column){
const sheet = SpreadsheetApp.getActiveSheet()
let print = (p, row, column) => {
let x1 = p.getSharingAccess() // getSharingPermission(),getAccess(email)
let x2 = p.getUrl()
let buff = [[x1, x2, p]]
sheet.getRange(row, column, 1 , 3 ).setValues(buff)
// sheet.getRange(row, column, buff.length, buff[0].length).setValues(buff)
}
let i=1
files.forEach((e) => print(e, i++, column))
}

■スクリプト2
 次に自分のgoogle drive 内の「全ファイルとフォルダの一覧」を作成するスクリプトを記載します。

 ドライブ内のファイル数にもよりますが、実行には結構長い時間がかかります

 

function myFunction() {  
const sheet = SpreadsheetApp.getActiveSheet()

const printSheet = (v, row, column) => {
let x1 = v.getSharingAccess() // getSharingPermission(),getAccess(email)
let x2 = v.getUrl()
let buff = [[x1, x2, v]]
sheet.getRange(row, column, 1 , 3 ).setValues(buff)
// sheet.getRange(row, column, buff.length, buff[0].length).setValues(buff)
}

let p = DriveApp.getFolders()
var i = 1;
while (p.hasNext()) {
printSheet(p.next(), i++, 1)
}

p = DriveApp.getFiles()
i = 1;
while (p.hasNext()) {
printSheet(p.next(), i++, 5)
}
}

 

google script 入門 (google drive内ファイルのアクセス権調査)

google ドライブ内指定フォルダの「ファイル一覧を取得する」と共に
各ファイルの「アクセス可否」を調査するスクリプトを作りました。

単機能でシンプルなスクリプトです。

google スクリプトを初めて動かす方は初めに以下も読んでみて下さい。
 ・google script 入門 (スプレットシートに "Hello World" を表示するまで)

 


■実行結果
 実行結果は下図のようになります。
 一部加工してあります。(背景色付加及び文字を隠しています)

20200419h

 

 

■スクリプト
   スクリプトコードは下図の通りです。
 「?????????」と書かれている2か所は自分の環境に合わせて変更してください


  20200419j

 

function myFunction() {
// アクセスできるか確かめる gmailアドレス
const email= "??????????????????@gmail.com"
// googleドライブ内の調査対象フォルダのURL
const url = 'https://drive.google.com/drive/u/0/folders/1??????????????????'
let paths = url.split('/')
let folderId = paths[paths.length - 1]
let folder = DriveApp.getFolderById(folderId)
let files = folder.getFiles()
let list = []
while(files.hasNext()) {
var buff = files.next()
list.push([buff.getAccess(email), buff.getName(), buff.getUrl()])
// list.push([buff.getSharingAccess(), buff.getName(), buff.getUrl()])
// list.push([buff.getSharingPermission(), buff.getName(), buff.getUrl()])
};
//list = list.reverse() // 必要に応じて、逆順に変換
let sheetName = 'シート1'
let rowIndex = 1
let colIndex = 1
let ss = SpreadsheetApp.getActive()
let sheet = ss.getSheetByName(sheetName)
let range = sheet.getRange(rowIndex, colIndex, list.length, list[0].length)
range.setValues(list)
}

 

 

google script 入門 (スプレットシートに "Hello World" を表示するまで)

 

google スクリプトを初めて書いてみました。

"Hello"を表示させるまで、いくつものエラーや警告が出たので、
解決策をメモしておきます。

 

■スプレットシート作成
 Chromeブラウザで google drive を開き、googleスプレットシートを作成。
 20200419e

■エラー「現在、ファイルを開くことが出来ません
 スクリプトエディタを起動しようとしたとたんにエラーが発生。
 原因は、Chromeブラウザのデフォルトでないgmailでログインしたgoogle driveで
 google スプレットシートを作った為でした。
 デフォルトのgmailアドレスでgoogle driveにログインしたら解決しました。


 20200419c



■スクリプト入力
 スクリプトエディタを開き、以下のスクリプトを2行記入。

 

function myFunction() {
  Browser.msgBox("Hello")
SpreadsheetApp.getActiveSheet().getRange(1, 1).setValue("Hello")
// Logger.log("Hello")
}

 

 そして、スクリプトを保存。

20200419f


■スクリプト実行
 実行ボタン(スクリプトを入力したプロジェクトの三角形のボタン)を押すと、以下の警告文が表示される。
  ・Authorization required
  ・アカウントの選択
  ・このアプリは確認されていません
  ・**がGoogleアカウントへのアクセスをリクエストしています

 下図のようにすれば、最終的に スプレットシートに "hello" ダイアログが表示されました。

20200419g_20200420184001

 

20200419d

 

■以下のスクリプトも見てみて下さい
 ・google script 入門 (google drive内フォルダのファイル一覧及びアクセス可否調査)

2020年4月19日 (日)

Google ドライブ の ファイルURL と 共有(公開)について

新型コロナで "stay home" 状態なので、久しぶりに記事を書きます。

 

google ドライブ内のファイル共有(ファイル公開)に関する記事です。

 

■結論 (私が今回知ったこと)


 ・google ドライブ内のファイル(フォルダ)には 「ID」 というものが付いている。

 ・「ID」 はファイルを開いた時に、ブラウザのURLを見れば分かる。(下記赤色部分)
   例:https://docs.google.com/spreadsheets/d/1?????????????????????/edit?usp=sharing

 ・googleドライブ内でファイルを「移動」しても「ファイル名を変えて」も、「ID」は変わらない。

 ・ファイルを共有する前と後で、「ID」は変わらない

 ・ラインなどでファイル共有URLを送りたい場合は、単にブラウザでファイルを開いた時に表示されるURLを送れば良い。
   例:https://docs.google.com/spreadsheets/d/1?????????????????????/

 ・公開されていないことを確認するには、ブラウザをシークレットモード(プライベートモード)で開き、
  ファイルのURLを入力しアクセス出来ないことを確認すれば良い。

 

20200420a

■ファイル共有方法

googleドライブ内のファイルを他人と共有する場合、以下の2パタンがあります。

 A. 特定の人のみアクセス可能

 B. 世界中の人に公開

 

20200419a

 

■ファイルが共有されていない事の確認方法
 ブラウザをシークレットモード(プライベートモード)で開き、ファイルのURLを入力すれば、アクセス有無を確認出来ます。

20200419b

keyword:google drive

« 2013年2月 | トップページ