1
1

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 1 year has passed since last update.

Google Apps ScriptAdvent Calendar 2023

Day 9

お前のGoogleドライブを見せろ!といわれたら差し出すリストを作るためのGAS

Last updated at Posted at 2023-12-08

# みんな!!GOOGLEドライブの容量圧迫してない?(15GB)と思ったら読んでね。

てなわけで、パンッパンになったGoogleドライブの中身を最下層まで探してスプレッドシートにリスト化するステキなGASを共有するよ!

もう、これ!!


function getFileListInFolder() {
  // スプレッドシートとシートを取得
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const folder = DriveApp.getRootFolder();
  const folderList = [];

  // フォルダとサブフォルダのリストを再帰的に取得
  const folders = folder.getFolders();
  while (folders.hasNext()) {
    const c_folder = folders.next();
    console.log(c_folder.getName(), c_folder.getId(), c_folder.getUrl())
    folderList.push([c_folder.getName(), c_folder.getId(), c_folder.getUrl()]);
    getSubFolders(c_folder, folderList);
  }

  // ファイルリストを取得
  const allFileList = getChildFiles(folderList);

  // スプレッドシートの指定シートにハイパーリンク付きのリストを出力
  const shHyperLink = ss.getSheetByName('リスト');
  shHyperLink.getRange(2, 1, allFileList.length, 4).setValues(allFileList);
}

// サブフォルダを再帰的に取得する関数
function getSubFolders(parentFolder, folderList) {
  const folders = parentFolder.getFolders();
  while (folders.hasNext()) {
    const subFolder = folders.next();
    console.log([subFolder.getName(), subFolder.getId(), subFolder.getUrl()])
    folderList.push([subFolder.getName(), subFolder.getId(), subFolder.getUrl()]);
    getSubFolders(subFolder, folderList);
  }
}

// フォルダ内のファイルリストを取得する関数
function getChildFiles(folderList) {
  const list = [];
  for (let i = 0; i < folderList.length; i++) {
    const folderId = folderList[i][1];
    const folder = DriveApp.getFolderById(folderId);
    const files = folder.getFiles();
    while (files.hasNext()) {
      const buff = files.next();
      // ファイル情報とハイパーリンクをリストに追加
      console.log([
        folder.getName(),
        folder.getUrl(),buff.getName(),buff.getUrl()])
      list.push([
        folder.getName(),
        folder.getUrl(),buff.getName(),buff.getUrl()]);
    }
  }
  return list;
}

ただ、これだとマイドライブ全体で実行時間を大きく超えちゃう!って場合は、
ここを変えてね。

  1. スプレッドシートのsearchFolderシートのA1セルに任意のフォルダーのidを入力。
  2. const folders = DriveApp.getRootFolder(); → const folders = folder.getFolders();

function getFileListInFolder() {
  // スプレッドシートとシートを取得
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const shId = ss.getSheetByName("searchFolder");
  const folderId = shId.getRange(1, 1).getValue();
  const folder = DriveApp.getFolderById(folderId);
  const folders = folder.getFolders()
  const folderList = [];

  // フォルダとサブフォルダのリストを再帰的に取得
  while (folders.hasNext()) {
    const c_folder = folders.next();
    console.log(c_folder.getName(), c_folder.getId(), c_folder.getUrl())
    folderList.push([c_folder.getName(), c_folder.getId(), c_folder.getUrl()]);
    getSubFolders(c_folder, folderList);
  }

  // ファイルリストを取得
  const allFileList = getChildFiles(folderList);

  // スプレッドシートの指定シートにハイパーリンク付きのリストを出力
  const shHyperLink = ss.getSheetByName('リスト');
  shHyperLink.getRange(2, 1, allFileList.length, 4).setValues(allFileList);
}

// サブフォルダを再帰的に取得する関数
function getSubFolders(parentFolder, folderList) {
  const folders = parentFolder.getFolders();
  while (folders.hasNext()) {
    const subFolder = folders.next();
    console.log([subFolder.getName(), subFolder.getId(), subFolder.getUrl()])
    folderList.push([subFolder.getName(), subFolder.getId(), subFolder.getUrl()]);
    getSubFolders(subFolder, folderList);
  }
}

// フォルダ内のファイルリストを取得する関数
function getChildFiles(folderList) {
  const list = [];
  for (let i = 0; i < folderList.length; i++) {
    const folderId = folderList[i][1];
    const folder = DriveApp.getFolderById(folderId);
    const files = folder.getFiles();
    while (files.hasNext()) {
      const buff = files.next();
      // ファイル情報とハイパーリンクをリストに追加
      console.log([
        folder.getName(),
        folder.getUrl(),buff.getName(),buff.getUrl()])
      list.push([
        folder.getName(),
        folder.getUrl(),buff.getName(),buff.getUrl()]);
    }
  }
  return list;
}

基本情報だけ取り出してリンクも自動的に機能するし便利!

また今度、ファイル名とリンク以外の情報をリスト化する方法も書こうと思います!

1
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?