![スクリーンショット_2019-08-17_12](https://assets.st-note.com/production/uploads/images/13693892/rectangle_large_type_2_a249e8ea254b318b9b7597a7ebd341d8.png?width=1200)
【GAS/非エンジニア向け】GoogleDriveの特定のファイルデータをSpread Sheet書き出すプログラムまとめ
この記事では、Google Driveの特定のフォルダにあるファイルデータをSpread Sheetに書き込む処理、Google Driveのフォルダやファイルを移動するGoogle Apps Script(GAS)のプログラムを非エンジニアの方に向けて紹介します( ・v・)b
この記事では、以下のプログラムをGASで実現します。
① Google Driveの特定のフォルダのファイルデータを特定のSpread Sheetへ全て書き込む
② ①に加えて、指定したフォルダのファイルデータとフォルダデータの中身のファイル(フォルダの中のフォルダのファイルも含む)を特定のSpread Sheetへ全て書き込む
③ Google Driveの特定のフォルダの指定したファイルのみ特定のSpread Sheetへ書き込む
④ Google Driveの特定のフォルダの指定した文字列がファイル名に含まれるファイルのみ特定のSpread Sheetへ書き込む
この記事で紹介しているプログラムだけで、Google Driveでの操作でよくある作業をプログラムで自動化できるので、日々の作業量を相当削減することができます👏
一旦Spread Sheetにデータを書き込んでしまえば、Excel形式やCSVファイルとしてなど様々なデータ形式でダウンロードすることができるので、とても便利ですね。
はじめに
今回この記事で扱うのは、Google DriveとGoogle Spread SheetとGoogle Apps Scriptで、使う技術としては以下です。
・Google Apps Script(JavaScript)でのプログラミング
・Google Drive APIへのアクセス
・Sheet APIへのアクセス
仕組みとしては、以下の画像のようなイメージです。
この記事で紹介しているプログラムを少しアレンジするだけで、Google DriveやSpread Sheetの操作のほとんどをプログラムで自動化することができます。
この記事を読み進めてプログラムを実行するために必要なものはGoogleアカウントだけです。GmailアカウントがあればOK。
それでは、さっそくプログラムの紹介を始めていきます。
1. GASを実行してみる
まずは、GASを実行できる環境を用意していきます。
任意のスプレッドシートを開き、「ツール > スクリプトエディタ」とクリックしていき、スクリプトエディタを開いてください。
以下のようなプログラムを書くことができる画面が開けばOKです。
それでは、簡単なプログラムを書いて動かしてみましょう。
上の画像のようにプログラムを書き、「command + S」などでファイルを保存し、「▶︎」をクリックしてプログラムを実行してください。
上のプログラムは、ログに文字列を表示するプログラムだったので、「表示 > ログ」とクリックしていき、ログを確認してみてください。
下の画像のように、「初めてのGASプログラミング!」と表示されていればOKです。
以上で、簡単なGASの実行方法が分かりましたね。
次は、Google DriveのファイルをSpread Sheetに書き込んでいくプログラムを書いて実行していきましょう。
2. ① Google Driveの特定のフォルダのファイルデータを書き込む
まずは、Googleアカウントにログインした状態でGoogle Driveにアクセスし、ファイルを読み込みたいフォルダを開きます。
フォルダを開いたら、URLの最後の箇所がそのフォルダのIDなので、その文字列をメモしておきます。
次に、スクリプトエディタ画面で以下のようなプログラムを書きます。
var FOLDER_ID = 'xxxxx' // フォルダIDを指定します。
function myFunction() {
writeAllFilesInFolder(FOLDER_ID);
}
function writeAllFilesInFolder(folderId) {
var folder = DriveApp.getFolderById(FOLDER_ID);
var rowIndex = 1; // 書き込みを開始する行番号
var colIndex = 1; // 書き込みを開始する列番号
var sheetName = 'シート1'; // 書き込みを行うSpreadSheetのシート名
// 指定されたフォルダIDのフォルダのファイルを全て取得します。
var files = folder.getFiles();
var extractedFiles = []
// 指定されたフォルダIDのフォルダのファイルを全て取得します。
while(files.hasNext()) {
var file = files.next();
Logger.log(file.toString());
sizeKb = file.getSize() === 0 ? 0 : file.getSize() / 1000;
extractedFiles.push([file.getId(), file.getName(), file.getUrl(), sizeKb]);
};
// 一列名に列名を書き込みたいので、リストに追加します。
extractedFiles.push(['ファイルID', 'ファイル名', 'ファイルのURL', 'ファイルサイズ(KB)']);
// folder.getFiles()では、ファイルは新しいものが最初に来ます。
// 登録された順にしたいので、reverse() で調整します。
extractedFiles = extractedFiles.reverse()
// このGASスクリプトを動かすSpread Sheetを取得します。
var spreadSheet = SpreadsheetApp.getActive();
var sheet = spreadSheet.getSheetByName(sheetName);
var range = sheet.getRange(rowIndex, colIndex, extractedFiles.length, extractedFiles[0].length);
// 対象のSpread Sheetの範囲にまとめて書き出します
range.setValues(extractedFiles);
}
「var FOLDER_ID = 'xxxxx'」の箇所のxxxxxは先に控えておいたフォルダのIDで書き換えてください。
プログラムを書いてファイルを保存できたら、「実行 > 関数を実行 > myFunction」とクリックしていってください。
関数の実行後、Spread Sheetを確認すると下の画像のようになっていればOKです。(ファイル名などはご自身のフォルダの内容になっています。)
これで、Google Driveの特定のフォルダのファイルデータを書き込むことができましたね!
ここまでで作業を進めてみて何らかのエラーになった方は、以下のいずれかにあてはまらないか確認してみてください。
*関数を実行してエラーになる場合と対処法*
①メソッドを実行して、「現在、ファイルを開くことができません。アドレスを確認して、もう一度試してください。」と表示される場合
→GASを実行する時にログインしているGoogleアカウントが、デフォルトのGoogleアカウントとなっているか確認してください。GASの実行権限があるのはデフォルトのGoogleアカウントのみです。デフォルトのGoogleアカウントでログインしてGASを実行するか、デフォルトのGoogleアカウントを変更してください。
②「このアプリは確認されていません。このアプリはGoogleによる確認が済んでいません。」と表示される場合
→GASを実行してGoogle Driveにアクセスできる許可をしていない場合に表示されます。「詳細→{スプレッドシート名}に移動→許可」と押していき、アクセス権限を許可してください。
③メソッドを実行して、「指定されたIDのアイテムは見つからなかったか、アクセスする権限がありません。」と表示される場合
→GASを実行する時にログインしているGoogleアカウントが、対象としてID指定したフォルダの編集可能アカウントに含まれているかどうかを確認してください。GoogleDriveでフォルダを開き、そのフォルダのメニューの「共有」という箇所をクリックし、GASを実行する時にログインしているアカウントに編集権限を追加してください。
④「TypeError: null のメソッド「getRange」を呼び出せません。」と表示される場合
→Spread Sheetのシート名が正しく指定できていない可能性がります。プログラムの「var sheetName = 'シート1';」の部分に、書き込みたいSpread Sheetのシート名と同じになっているか確認してください。
▼④の参考画像
3. ② 指定したフォルダのファイルデータとフォルダデータの中身のファイル(フォルダの中のフォルダのファイルも含む)を取得して全て書き込む
次に、特定のフォルダの中にフォルダがあった場合には、そのフォルダの中のファイルもSpread Sheetに書き込むようにしてみましょう。
フォルダの中身が以下のようになっている状態にしておきます。
新規フォルダ
- フォルダ①
- スプレッドシート①
- フォルダ②
- スプレッドシート②
この時、スプレッドシート①もスプレッドシート②もSpread Sheetに書き込みするようにします。
****** 注意 ******
この記事は公開後1日間は無料で、その後有料記事となります。
他のプログラミングチュートリアル記事も公開後1日間は無料になるので、無料で読みたい方は、noteのフォローをオススメします( ・v・)b
noteフォローはこちらから → https://note.mu/virtual_surfer
Twitterフォローはこちらから → https://twitter.com/virtual_techX
スクリプトエディタで以下のプログラムを書いてください。
この記事が気に入ったらサポートをしてみませんか?