1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【GAS】フォルダ内ファイル一覧をスプレッドシートに作成+GAS実行時の日付も残す方法

Posted at

はじめに

業務で社内・社外のマニュアルをパワーポイントで作成し、
Google Driveで保存・共有をしています。
マニュアルの管理がなされておらず、
最新版がどれなのか、一目ではわからない状態でした。

そのため、マニュアル内の、商標や問い合わせ先を修正した際、
いつ時点のファイルには更新されているのか、
一つ一つファイルを開けるのが大変でした。

なので今回、GASで指定のフォルダ内のファイル名、URL、最終更新日を取得して、
以下を達成しようと試みました。

  1. 最終更新日を取得することで修正対象のファイルを把握
  2. 修正対応後、再度GASを実行→最終更新日の再取得で「対応済みかどうか」の確認

今回工夫したポイント

・ファイルの最終更新日時の取得
・GASを実行した日時を残す
・ファイル一覧を最新状態にしたいので、前に作成した一覧は一度クリアにする
(前回GAS実行時より、ファイル数が減っていると、古いファイル一覧が一部残ってしまうため)

コードの流れ~ファイル一覧の取得準備~

1.日付を取得する


//現在の日付を取得する
  var date = new Date(); 
  var dateStr = Utilities.formatDate(date, 'JST', 'yyyy-MM-dd HH:mm:ss');

日付だけではなく、時間も記録したいため'yyyy-MM-dd HH:mm:ss'で、日付の表示形式を変更しました


2.ファイル一覧を作成したいスプレッドシートを取得する
3.シート内の値をクリアにする
4.取得対象のフォルダをIDを変数に入れる


  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('シート名');
  sheet.clearContents();
  const folderId = 'フォルダID';

フォルダIDはURLから確認できます。
'https://drive.google.com/drive/u/1/folders/{フォルダID}'


4.ファイル一覧データを格納する'list(array)'を用意する
5.書き出す'row','colum'を指定しておいてあげる

  // ファイル一覧データを入れるリストを用意(後ほど、ここにデータを格納します)
  var list = [];

  // スタートのrowとcolumを指定する
  var rowIndex = 1;
  var colIndex = 1;

コードの流れ~ファイル一覧を取得して、スプレッドシートに貼り付ける~

6.ファイル名、ファイルURL、最終更新日を取得する
7.予め用意してあった'list(array)'に格納してあげる

  // フォルダIDを指定して、ファイル(複数)を取得する 
  var folder = DriveApp.getFolderById(folderId);
  var files = folder.getFiles();

  while(files.hasNext()){
    var buff = files.next();
    var fileName = buff.getName();
    var fileUrl = buff.getUrl();
    var lastUpdateDate = Utilities.formatDate(buff.getLastUpdated(),'JST', 'yyyy-MM-dd HH:mm:ss');

  // 取得したfileName,file,lastUpdateDateを追加する 
    list.push([fileName,fileUrl,lastUpdateDate]);
  }

8.格納したarrayを登録した順にするため、順序を逆にする
9.格納したarrayをスプレッドシートに貼り付ける(手順5で指定していたrow,columを使用)

  // listの順序を並び替える
  list.reverse();

  // 一覧を貼り付けたい場所を取得する
  var ranges = sheet.getRange(rowIndex, colIndex, list.length, list[0].length);

  // 取得した場所に、一覧を貼り付ける
  ranges.setValues(list);


10.貼り付けたリストの一番下のrangeを取得して、日付を貼り付ける

  // A列の値を取得
  var aValues = sheet.getRange('A:A').getValues();

  // A列で値がはいっているrowを取得する
  var lastRow = aValues.filter(String).length;

  // 日付を入れたい箇所=lastRowにプラス1をする
  var dateRow = lastRow + 1;
  var rangeDate = sheet.getRange(dateRow,1);

  // 手順1で設定した日付を貼り付ける
  rangeDate.setValue(dateStr);

GAS実行後のスプレッドシート

A列にファイル名、B列にファイルURL、C列に最終更新日が取得できました。

list.png

まとめと今後の課題

・よかった点
これまで、値を取得して、スプレッドシートに貼り付ける際、一つ一つループを回す→一つ一つ貼り付けるといったコードを書いていましたが、ファイル名等の取得する際に、一度リストにしてしまってから貼り付ける方法を知り、書くコードが一部短くすることができました。
他にも、最終更新日を確認でき、修正が必要なファイルを確認することができました。

・今後の課題
ただ、複数フォルダに複数ファイルが散在するので1フォルダにまとめないと、このGASは実行できない難点もあるなと感じました。複数フォルダ間の操作も、今後トライしてみたいと思います。

加えて、トリガーの設定(ファイル編集時か起動時、または時限式か?など)も検討していきたいです。

今回参考にさせていただいた記事

▼Google Drive上の指定のフォルダ以下のファイル一覧をSpreadSheetに書き出す
https://qiita.com/akiko-pusu/items/43c89dcfeb1d544cce38

▼【コピペで使える】GASでフォルダ/ファイルの最終更新日時を取得してみる
https://for-dummies.net/gas-noobs/how-to-get-updated-date-of-folders-and-files-on-google-drive/#1

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?