web-dev-qa-db-ja.com

ドライブファイルのリストをスプレッドシートに取得する

私はAwesomeTableで遊んでいて、Post-Itテンプレートが好きです。私のユースケースは、頻繁に使用されるファイルのリストへのNiceインターフェースをキュレートすることです。リストは時間の経過とともに劇的に変化することはありませんが、毎週変化します。手動で追加するのではなく、ファイルのリストを(タグ、名前、最終変更日などを介して)自動的に生成できるようにしたいと思います。 Awesome-Tablesが使用するGoogleスプレッドシートにドライブファイルのリストを取得するために、基礎となるGoogleスプレッドシートがGoogleドライブを照会する方法はありますか?

1
John Faig

Files Cabinet があなたが探しているもののようです。 Awesome Table への無料のアドオンです。

ファイルキャビネットは、「Google Driveフォルダーの一覧表示に役立ちます。すべての子フォルダーを検索し、検出可能なすべてのファイルを一覧表示します。すべてのフォルダーとすべてのファイルをすばやくカウントした後、 Awesome Tableで作成されたカタログに表示する準備ができているファイル。」

私のように炭鉱に住んでいて、以前はこれらのことを知らなかった人にとって、Awesome TableはGoogleスプレッドシート用の非常に人気のあるアドオン(1,000万人以上のユーザー)であり、ユーザーはスプレッドシートデータの視覚化を少しで作成できますまたはコーディングなし;ビジュアライゼーションは、Googleスプレッドシートからアクセスするか、Webページに埋め込むことができます。執筆時点では、「* 1000ページビュー/月まで無料」です。

3
Tedinoz

それは本当です-"Files Cabinet"、 "Awesome Tables"のアドオンは、Googleドライブフォルダーの一覧表示に役立ちます。しかし、この質問と回答を見ている人の中には、Googleスプレッドシートスクリプトだけを使用してフォルダとファイルのリストを作成しようとしている人がいるかもしれません。このコードは彼らのために書かれています。

次のコードは、Googleドライブのフォルダー名を変数として受け入れます(9行目の「foldername」。フォルダー名を編集するだけです)。名前付きフォルダー内/下にあるすべてのファイル、サブフォルダー、およびそれらのファイルが一覧表示されます。

ご覧のとおり、コードは厳密にオリジナルではありません。私がさらに開発したコードを最初に開発した人に敬意を表します。

:itisGoogleドライブに保持されているすべてのファイル、サブフォルダー、およびそれらのファイルのリストを作成できます。これを行うコードと以下に示すコードの違いは、very微妙です。同じコマンドgetFoldersが使用されます。違いは、コマンドがこの例のように名前付きフォルダーから呼び出されるか、DriveAppから呼び出されるか( var files=DriveApp.getFiles(); )です。あなたは警告されています;)

function ListNamedFilesandFolders() {
/* Adapted from Code written by @hubgit https://Gist.github.com/hubgit/3755293
Updated since DocsList is deprecated  https://ctrlq.org/code/19854-list-files-in-google-drive-folder
*/


  // List all files and sub-folders in a single folder on Google Drive
  // declare the folder name
  var foldername = 'myfoldername';

  // declare this sheet
  var sheet = SpreadsheetApp.getActiveSheet();
  // clear any existing contents
  sheet.clear();
  // append a header row
  sheet.appendRow(["Folder","Name", "Date Last Updated", "Size", "URL", "ID", "Description", "Type"]);


  // getFoldersByName = Gets a collection of all folders in the user's Drive that have the given name.
  // folders is a "Folder Iterator" but there is only one unique folder name called, so it has only one value (next)
  var folders = DriveApp.getFoldersByName(foldername);
  var foldersnext = folders.next();
  // Logger.log("THE FOLDER IS "+foldersnext);// DEBUG

  // declare an array to Push data into the spreadsheet
  var data = [];

  // list files in this folder
  // myfiles is a File Iterator
  var myfiles = foldersnext.getFiles();

  // Logger.log("FILES IN THIS FOLDER"); DEBUG

  // loop through files in this folder
  while (myfiles.hasNext()) {
    var myfile = myfiles.next();
    var fname = myfile.getName();
    var fdate = myfile.getLastUpdated(); 
    var fsize = myfile.getSize();
    var furl = myfile.getUrl();
    var fid = myfile.getId();
    var fdesc = myfile.getDescription();
    var ftype = myfile.getMimeType();
    //Logger.log("File Name is "+myfile.getName()); //Logger.log("Date is "+myfile.getLastUpdated()); //Logger.log("Size is "+myfile.getSize());
    //Logger.log("URL is "+myfile.getUrl()); //Logger.log("ID is "+myfile.getId()); //Logger.log("Description is "+myfile.getDescription());
    //Logger.log("File Type is "+myfile.getMimeType());

    // Populate the array for this file
    data = [ 
      foldersnext,
      fname,
      fdate,
      fsize,
      furl,
      fid,
      fdesc,
      ftype
    ];
    //Logger.log("data = "+data); //DEBUG
    sheet.appendRow(data);
  } // Completes listing of the files in the named folder

  // Now get the subfolder
  // subfolders is a Folder Iterator
  var subfolders = foldersnext.getFolders();
  //Logger.log("THE SUBFOLDER(S) ARE"); DEBUG HEADING

  // now start a loop on the SubFolder list
  while (subfolders.hasNext()) {
    var subfolderdata = [];
    var mysubfolders = subfolders.next();
    var mysubfolder = mysubfolders.getName();  
    //Logger.log("Subfolder name:"+mysubfolder); //DEBUG

    // Get the files
    // mysubfiles is a File Iterator
    var mysubfiles = mysubfolders.getFiles();
    //Logger.log("FILES IN THIS FOLDER"); //DEBUG HEADING

    // now start a loop on the files in the subfolder
    while (mysubfiles.hasNext()) {
      var smyfile = mysubfiles.next();
      var sfname =  smyfile.getName();
      var sfdate =  smyfile.getLastUpdated(); 
      var sfsize =  smyfile.getSize();
      var sfurl =  smyfile.getUrl();
      var sfid =  smyfile.getId();
      var sfdesc =  smyfile.getDescription();
      var sftype =  smyfile.getMimeType();
      //Logger.log("Subfolder is "+foldersnext+"/"+mysubfolder); 
      //Logger.log("File Name is "+ smyfile.getName()); Logger.log("Date is "+ smyfile.getLastUpdated()); Logger.log("Size is "+ smyfile.getSize());
      //Logger.log("URL is "+ smyfile.getUrl()); Logger.log("ID is "+ smyfile.getId()); Logger.log("Description is "+ smyfile.getDescription());Logger.log("File Type is "+ smyfile.getMimeType());
      subfolderdata = [ 
        (foldersnext+"/"+mysubfolder),
        sfname,
        sfdate,
        sfsize,
        sfurl,
        sfid,
        sfdesc,
        sftype
      ];
      //Logger.log("subfolderdata = "+subfolderdata);
      sheet.appendRow(subfolderdata);
    }
  }
}

FWIW、これは、コードが実行されたときのスプレッドシートの外観です(個人情報が少なくなります)。

Spreadsheet screenshot

1
Tedinoz