メインコンテンツへスキップ
見出し画像

【QuickTips 05】GASで開いてるGoogleスプレッドシート のGoogleドライブの保存先フォルダを開きたい

    シンプルでちょっと便利な Quick Tips。マガジンにまとめていきます。

    今回は前回の Quick Tipsの続きです。



    今開いてるスプレッドシートの保存先フォルダをGASで開きたい!

    画像

    前回、開いているGoogleスプレッドシートの保存先フォルダを開く方法を紹介しました。

    どうしてもGASでこれを実現したい!って人の為にコードを紹介します。

    GAS(GoogleAppsScript)を勉強中の人はコードを見る前に自分で作ってみましょう!






    開いているスプレッドシートの保存先フォルダを開くコード

    画像
    /*
    mirのnoteの QuickTipsは文字数を1500文字以下でとしていますが、
    こちらのコード部分の文字数 886文字はカウント除外としています
    */
    
    //カスタムメニューに追加
    function onOpen(){
      const ui = SpreadsheetApp.getUi();
      ui.createMenu('特殊機能')
        .addItem('保存先フォルダを開く','openParentsFolder')
        .addToUi();
    }
    
    //指定したリンクを開く関数 ポイント1
    function openUrl(name,url) {
      const html = HtmlService.createHtmlOutput(
        `<script>
          window.open('${url}', '_blank');
          google.script.host.close();
        </script>`
      );
      SpreadsheetApp.getUi().showModalDialog(html, name+"を開くよ・・・");
    }
    
    //このスプレッドシートの保存先フォルダのフォルダ名、URLをopenUrlに渡して実行するメイン関数
    function openParentsFolder(){
      const ss = SpreadsheetApp.getActiveSpreadsheet();
      const ssId = ss.getId();
      const file = DriveApp.getFileById(ssId); //ポイント2
      const folder = file.getParents().next(); //ポイント3
      const folderName = folder.getName();
      const folderUrl = folder.getUrl();
    
      openUrl(folderName,folderUrl); 
    }

    自動でメニューに追加され、そこから実行できるコードになってます。

    画像

    ボタンから実行したい場合は、openParentsFolder を割り当てしましょう。

    画像



    コードのポイント

    今回のコードのポイントはこの3点。

    1. GASでモーダルダイアログ経由でURLのサイトを開く

    2. IDを使ってDriveAppでファイルを取得

    3. フォルダイテレータから フォルダを取り出す



    1. GASでモーダルダイアログ経由でURLのサイトを開く

    この処理をしているのが、openUrl という関数なんですが、GASでは直接URLを開くというブラウザ操作が出来ないので モーダルダイアログ内でJavaScriptを実行させます。

    これは別のnoteで解説しています。



    2. IDを使ってDriveAppでファイルを取得

    初学者が混乱しがちなとこ。

    const ss = SpreadsheetApp.getActiveSpreadsheet();

    ssはあくまでもスプレッドシートサービスで取得したオブジェクト。

    画像

    利用できるのは Spreadsheetクラス のメソッドのみです。

    画像

    この中には親フォルダを取得するメソッドが無い為、スプレッドシートの IDを取得してから

    const file = DriveApp.getFileById(ssId);

    ssIdを使ってDrvieAppでファイルを再取得、DriveサービスのFileクラス使えるようにします。

    画像



    3. フォルダイテレータから フォルダを取り出す

    3つ目のポイントもわかりにくいかも。

    fileから親フォルダを取得するメソッドは getParents()なんですが、

    画像

    この返り値は フォルダイテレータです。

    イテレータの説明は割愛しますが、ざっくり言うと複数のフォルダの集合体って感じ。

    普通の感覚だとファイルの親フォルダは1つなんですが、Googleドライブは以前は一つのファイルを複数のフォルダに保存することが出来ました。(タグのようなイメージ)

    ※2021年12月からはショートカットに変更。

    つまり1つのファイルに親が複数いる、ちょっと複雑な子だったわけですw

    この名残ですかね。

    const folder = file.getParents().next();

    この中(実際は中身は1つだけ)から1番目の親を取り出すのに next() を付ける必要があります。

    マイドライブ直保存の場合は、マイドライブを取得します。



    「GASで保存先フォルダを開く」実装の注意点

    画像

    GASでやる場合は、スプレッドシートごと、さらに人毎に初回にアクセス権限承認が必要となります。

    しかも

    ダイアログを生成する為の HtmlService
    スプレッドシートを操作する為の SpreadsheetApp
    親フォルダを取得する為の DriveApp

    と3つの権限が必要。

    画像

    学びには良い題材ですが、実務利用はおススメしません。

    ぶっちゃけ生成AIのコードでも普通に使えます。

    画像
    画像



    今回のQucik Tipsの関連 note

    その他のGASのネタを マガジンにまとめています 👇


     
     

    mir

     
     
    元Excel職人・VBA使いから、Googleスプレッドシート職人・GAS使いにジョブチェンジ。謎解き感覚で お題(課題)を解決していくような記事を書こうかなと。その他、AIやらGeminiやらGoogleWorkspaceネタ全般

    あなたへのおすすめ