こんにちは!
Yuki (@yukibnb) です。
今回はGoogle Apps Script (GAS) を使ってGoogle Docs (Googleドキュメント) をPDF化してGoogle Driveに保存する方法を紹介します。
コピペでできるスクリプトに加え、カスタマイズのポイントも詳しく紹介します。
では見ていきましょう!
スプレッドシートをPDF化してGoogle Driveに保存したい方は以下解説記事をご覧ください。
【コピペでOK!】GASで現在のシートをPDF化する方法
はじめに
今回実現したいこと
ボタン一つで現在開いているGoogle DocsをPDF化し、指定したGoogle Driveのフォルダーに保存します。
手作業よりも大幅に時間短縮することができ、業務効率化を実現できます。
今回使用するサンプルGoogle Docs
今回はこちらの架空の会社のニュースレターを使用して解説します。
もちろんみなさん自身のどんなドキュメントでも使用できます。
では方法を見てみましょう!
コピペでOK!GASでGoogle DocsをPDF化&保存する方法
スクリプトエディタを開く
PDF化したいGoogle Docsを開き、次の手順でGoogle Apps Scriptのスクリプトエディタを開いてください。
- 画面上部の[ツール]をクリックする
- [スクリプトエディタ]をクリックする
するとスクリプトエディタが開きます。次の2点はお好きな名前に変更してください。
- プロジェクト名 (「無題のプロジェクト」と書いている箇所)
- スクリプト名 (「コード.gs」と書いている箇所)
スクリプトをコピペする
スクリプトエディタに以下のスクリプトをコピペしてください。
スクリプトエディタにもともと入力されていたfunction myFunction() { }
は消してください。
変数folderId
にPDFを保存したいGoogle DriveのフォルダーのフォルダーIDを入力してください。フォルダーIDの確認方法がわからない場合、以下記事をご覧ください。
【簡単!】GASでフォルダーを指定する方法
変数fileName
にPDFのファイル名を入力してください。
function savePdf(){ //PDFの保存先 //★★★フォルダーIDを入力してください★★★ let folderId = "フォルダーID"; //アクティブなドキュメントを取得する let doc = DocumentApp.getActiveDocument(); //ドキュメントIDを取得する let docId = doc.getId(); //★★★PDFのファイル名を入力してください★★★ //※ポイント: ファイル名が重複しないようにしましょう let fileName = "テストドキュメント"; //関数createPdfを実行し、PDFを作成して保存する createPdf(folderId, docId, fileName); } //PDFを作成し指定したフォルダーに保存する関数 //以下3つの引数を指定する必要がある //1: フォルダーID (folderId) //2: ドキュメントID (docId) //3: ファイル名 (fileName) function createPdf(folderId, docId, fileName){ //PDFを作成するためのベースとなるURL let url = "https://docs.google.com/document/d/" + docId + "/export?&exportFormat=pdf&format=pdf"; //アクセストークンを取得する let token = ScriptApp.getOAuthToken(); //headersにアクセストークンを格納する let options = { headers: { 'Authorization': 'Bearer ' + token } }; //PDFを作成する let blob = UrlFetchApp.fetch(url, options).getBlob().setName(fileName + '.pdf'); //PDFの保存先フォルダー //フォルダーIDは引数のfolderIdを使用します let folder = DriveApp.getFolderById(folderId); //PDFを指定したフォルダに保存する folder.createFile(blob); }
スクリプトを保存する
スクリプトをコピペするとこのようになります。
画像内のアイコンをクリックし、コピペしたスクリプトを保存してください。
これでGoogle DocsをPDF化してGoogle Driveの指定フォルダーに保存するGASの完成です!
関数savePdf
を実行するとPDF化&保存できます。
ただ毎回スクリプトエディタを開いて関数savePdf
を実行するのは手間なので、Google Docs上に独自メニューを作成します。
独自メニューを使用することで、スクリプトエディタを開かなくてもGASを実行してPDF化&保存できるようになります。
独自メニューを作成する
今開いているスクリプトエディタ内で、以下の手順で新しいスクリプトを作成してください。
- [+]アイコンをクリックする
- [スクリプト]をクリックする
するとこのように新しいスクリプトが表示されます。
スクリプト名はお好きなものに変更してください。上記画像では「メニュー.gs」としました。
「メニュー.gs」のスクリプトエディタに以下のスクリプトをコピペしてください。
もともと入力されていたfunction myFunction() { }
は消してください。
function onOpen() { let ui = DocumentApp.getUi() //メニュー名を決定 //★★★メニュー名は好きなものに置き換えてください★★★ let menu = ui.createMenu("GAS実行"); //メニューに実行ボタン名と関数を割り当て //★★★実行ボタン名は好きなものに置き換えてください★★★ menu.addItem("PDF作成","savePdf"); //スプレッドシートに反映 menu.addToUi(); }
これでGoogle Docsに独自メニューを表示するGASの完成です!
独自メニューのスクリプトについての詳しい解説は以下記事をご覧ください。
【コピペでOK!】スプレッドシートのメニューバーにGAS実行ボタンを追加する方法
※スプレッドシートに独自メニューを追加する方法とGoogle Docsに独自メニューを追加するGASは若干異なりますが大半が同じです。
Google Docsを更新する
Google Docsに戻り[更新]ボタンをクリックしてGoogle Docsを更新してください。
更新すると、[ヘルプ]の右側に独自メニュー[GAS実行]が表示されました。
GASを実行してみよう!
ではいよいよGASを実行し、今開いているGoogle DocsをPDF化しGoogle Driveのフォルダーに保存してみましょう。
独自メニュー[GAS実行]をクリックし、そして実行ボタン[PDF作成]をクリックしてください。
[PDF作成]をクリックすると関数savePdf
が実行されます。
GASの初回実行時に承認を求めるポップアップが表示されます。以下記事の手順に従って初回承認を行ってください。画像やGIF動画付きで詳しく確認できます。
【もう迷わない!】GAS初回実行時の承認方法
指定したGoogle Driveのフォルダーに無事PDFが保存されました!
これでGASの作成は完了です!
次にみなさん自身でカスタマイズしたい場合のポイントをいくつかご紹介します。
カスタマイズのポイントを紹介
ファイル名は重複しないようにしよう
//★★★PDFのファイル名を入力してください★★★ //※ポイント: ファイル名が重複しないようにしましょう let fileName = "テストドキュメント";
変数fileName
がPDFのファイル名となります。
今回のテストスクリプトではわかりやすいように"テストドキュメント"
という文字列にしましたが、みなさんが実際に使用する際はファイル名が重複しないように動的な情報を変数fileName
に含めることをおすすめします。
ファイル名が重複すると、GASを実行するたびに同じファイル名のファイルが増えてしまいます。同じファイル名でも上書きされないため、以下画像のようにどれがどれだか判別できなくなります。
動的な情報を含むファイル名とは以下のようなものです。
YYMMDD_請求書番号XXXX_お客様名
請求書_XXXX_お客様名
請求書XXXX
請求書番号は基本的に重複することのないユニークな番号です。
請求書や見積書などを書類番号があるGoogle DocsをPDF化する場合、書類番号を含めることをおすすめします。
もし単純にGoogle Docsのファイル名をそのままPDFのファイル名にしたい場合、変数fileName
を以下のように記述します。
let fileName = doc.getName();
今回使用したサンプルGoogle Docsのファイル名「ニュースレター」と同じファイル名のPDFを保存することができました。
getName
メソッドを使用すると対象のGoogle Docsのファイル名を取得できます。
誤クリックを防ぎたい場合
GASの実行ボタンをクリックすると「本当にPDFを作成しますか?」というメッセージボックスを表示させ、保存するかキャンセルするか選択させることもできます。
ひとつ操作が増えますが、誤クリックを防ぎたい場合におすすめです。
関数savePdf
の最初の部分に以下スクリプトを挿入してください。
let ui = DocumentApp.getUi(); //確認メッセージボックスを表示する let confirmation = ui.alert("本当にPDFを作成しますか?", ui.ButtonSet.OK_CANCEL); //「キャンセル」または「X印」をクリックすると保存せずにGASを終了する if(confirmation == ui.Button.CANCEL || confirmation == ui.Button.CLOSE) { ui.alert("操作をキャンセルしました"); return; }
挿入するとこのようになります。
GASの実行ボタンをクリックすると「本当にPDFを作成しますか?」と表示されます。
[OK]をクリックするとPDF化&保存されます。
[キャンセル]もしくは右上の[X]印をクリックするとPDF化せずその時点でGASが終了します。
まとめ
今回はGoogle Apps Script (GAS) を使ってGoogle DocsをPDF化してGoogle Driveの指定フォルダーに保存する方法を紹介しました。
コピペでそのまま使用できるので、さまざまな場面で活用頂けるとうれしいです。
次回記事もご期待ください!