• トップ
  • ブログ一覧
  • 【GAS】Google App ScriptでDrive上のフォルダ、ファイルを操作する
  • 【GAS】Google App ScriptでDrive上のフォルダ、ファイルを操作する

    はじめに

    前回、APIから取得したデータをGoogle スプレッドシートに転記する方法を書いたが、実際の業務ではGoogle App Scriptで他の操作も行っていたので、
    その一部として、フォルダ、ファイル操作について書いていく。
    【GAS】Google App ScriptでAPIからGoogle スプレッドシートにデータを書き込む

    フォルダ検索

    集めたデータを日付ごとに保存するのに日付フォルダを探してそこに格納するようにした。
    検索方法は主に2種類、フォルダIDとフォルダ名の検索がある。

    1// フォルダIDで検索する
    2// https://drive.google.com/drive/folders/(フォルダID) となっているのでそこをコピーする
    3var folderA = DriveApp.getFolderById(フォルダID);
    4
    5// フォルダにつなげることで、フォルダ内での検索になる。
    6var folders =  folderA.getFoldersByName("フォルダ名");
    7
    8// 実は該当するフォルダ名全てを取得するので複数取るので、
    9// 存在チェックして先頭のものを取得する
    10If (folders.hasNext()) {
    11        var folderB = folders.next();
    12}

    フォルダ作成

    その日付のフォルダがまだ作成されてない場合は新しいフォルダの作成を行う

    1// フォルダIDで検索する
    2// https://drive.google.com/drive/folders/(フォルダID) となっているのでそこをコピーする
    3var folderA = DriveApp.getFolderById("フォルダID");
    4
    5// フォルダにつなげることで、フォルダ内でのフォルダ検索になる。
    6var folders =  folderA.getFoldersByName("フォルダ名");
    7
    8// 実は該当するフォルダ名全てを取得するので複数取るので、
    9// 存在チェックして先頭のものを取得する
    10If (folders.hasNext()) {
    11        var folderB = folders.next();
    12}
    13else
    14{
    15// フォルダAの配下に新しいフォルダを作成
    16        var folderB = folderA.createFolder("フォルダ名");
    17}

    日付の取得

    ちなみに日付の取り方は以下の通り。
    文字列形成も参考に。

    1// 現在時刻の取得
    2var currentTime = new Date();
    3
    4// getMonth() は0 ~ 11 で受け取るので、月は+1 する。
    5// 0を足して2桁で切るので、"20250301"のようになる
    6var currenctTimeString = String(currentTime.getFullYear()) + String('0' + (currentTime.getMonth() + 1)).slice(-2) + String('0' + currentTime. getDate()).slice(-2)

    スプレッドシート検索

    基本的にはフォルダ検索と一緒の方法で取得できる。
    検索方法は主に2種類、ファイルIDとファイル名の検索がある。
    ただし、取得できるものが"ファイル"なので、なんのファイルなのかを確認する必要がある。

    1//  ファイルIDで検索する
    2// https://docs.google.com/spreadsheets/d/(ファイルID) となっているのでそこをコピーする
    3var fileA = DriveApp.getFileById("ファイルID");
    4
    5// フォルダにつなげることで、フォルダ内でのファイル検索になる。
    6var files =  folderA.getFilesByName("ファイル名");
    7
    8// 実は該当するファイル名全てを取得するので複数取るので、
    9// 存在チェックして先頭のものを取得する
    10If (files.hasNext()) {
    11        var fileB = files.next();
    12
    13// ファイルのタイプがスプレッドシートかを確認
    14        if (fileB.getMimeType() == 'application/vnd.google-apps.spreadsheet') {
    15// スプレッドシートとして開くことで、スプレッドシートを操作するメソッドが使えるようになる
    16                var spreadSheetC = SpreadsheetApp.openById(fileB.getId());
    17        }
    18}

    スプレッドシート作成

    フォルダ同様、なければスプレッドシートも作成するようにできる。

    1//  ファイルIDで検索する
    2// https://docs.google.com/spreadsheets/d/(ファイルID) となっているのでそこをコピーする
    3var fileA = DriveApp.getFileById("ファイルID");
    4
    5// フォルダにつなげることで、フォルダ内でのファイル検索になる。
    6var files =  folderA.getFilesByName("ファイル名");
    7
    8// 実は該当するファイル名全てを取得するので複数取るので、
    9// 存在チェックして先頭のものを取得する
    10If (files.hasNext()) {
    11        var fileB = files.next();
    12
    13// ファイルのタイプがスプレッドシートかを確認
    14        if (fileB.getMimeType() == 'application/vnd.google-apps.spreadsheet') {
    15// スプレッドシートとして開くことで、スプレッドシートを操作するメソッドが使えるようになる
    16                var spreadSheetC = SpreadsheetApp.openById(fileB.getId());
    17        }
    18}
    19else
    20{
    21// マイドライブにスプレッドシートを新しく作成
    22        var spreadSheetC = SpreadsheetApp.create("ファイル名");
    23// マイドライブに作られるので、ファイルを該当フォルダに移動する
    24        var fileD = DriveApp.getFileById(spreadSheetC.getId());
    25        fileD.moveTo(folderA);
    26}

    スプレッドシートコピー

    スプレッドシートだと関数でAPIから取得したデータを加工することもあるので、
    あらかじめ関数を準備したスプレッドシートをコピーして、関数の再入力の手間を省くことができる。

    1var templateFile = DriveApp.getFileById("ファイルID");
    2var copiedFile = templateFile.makeCopy("コピー後のファイル名", "コピーを置きたいフォルダ");

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background