Google Apps Script で指定したシートをPDF化するスクリプト

はじめに

Google Apps Scriptはかなり色々なことができ、指定したシートをPDF化するこももちろん可能です。Googleスプレッドシートで請求書や納品書などのテンプレートを作成しておいて、データを他のシートから取得して埋め込んでPDF化などすると便利です。ここでは、指定したスプレッドシートのPDF化を行うスクリプトをメモします。

なお、以降のコードは以下のサイト様のものを参考にさせて頂いてます。

Convert and Email Google Spreadsheets as PDF Files | CTRLQ


できるようになること

以下のようなスプレッドシートがあるとします。なお、このスプレッドシートは例として作成したもので請求書であることに意味はなくなんでもOKです。中身は全部手動で作成しておいてもいいですし、何かしらのスクリプトで自動でデータを挿入して作成しておいもOKです。
template_sheet

これをPDF化して、指定したフォルダ上に保存できるようになります。
pdf_folder

もちろんPDF化したファイルの中身はスプレッドシートの内容そのままです。
example-user

なお、以降では、保存するPDFのファイル名として、お名前(上記の場合、Example User)とPDF作成時のタイムスタンプを使用します。

スクリプト

以下がスクリプトになります。他の説明は下に載せます。


コード説明

上記のコメントだけでは不足している部分のみ載せます。

PDFの保存先となるフォルダを指定

以下の部分で指定しています。



Googleドライブ上では、フォルダやスプレッドシートにはそれぞれ一意のIDが設定されます。これらIDを指定してファイルの保存や処理を行う対象を指定できます。ここでフォルダIDの確認方法は次の通りです。

フォルダIDの確認方法

Googleドライブをブラウザ上で開き、以下のようにURLの中の*********がフォルダIDに該当します。


すなわち以下のようにフォルダを開いた状態でURLを確認した時に赤線部分が該当します。
folder_id

PDF化するスプレッドシートとシートの指定

上記のコードのように、単純に現在開いているスプレッドシートのシートをPDF化する場合は以下のようになります。
スプレッドシートのIDやシートのIDを事前に調べる必要はないです。



続いて現在開いているスプレッドシートとは別のスプレッドシートのシートを指定してPDF化したい場合は、以下のようになります。以下のコードでは事前にスプレッドシートとシートのそれぞれのIDを調べておく必要があります。



スプレッドシート、シートの各IDの確認方法は次の通りです。

スプレッドシートID、シートIDの確認方法

同じくIDを調べたいスプレッドシートをブラウザで開き、以下のようにURLの中のabcdefghijklmnopqrstuvwxyz1234567890のような英数字を含む部分がスプレッドシートのIDで、gid=の後に続く987654321がシートのIDです。なのでシートIDはもちろんシート毎に異なります。


すなわち以下のように赤線部分が該当します。
spreadsheet_id

PDF作成関数について

Googleスプレッドシートは、開いている時のURLにexport?format=pdfのようにパラメータを渡すことでPDFやCSV形式でダウンロードすることが可能です。例えば、スプレッドシートIDがabcdefghijklmnopqrstuvwxyz1234567890で、シートIDが987654321の場合に以下のURLにブラウザからアクセスすると、そのシートをPDF形式でダウンロード可能です。

すなわち、上記のスプレッドシートIDとシートIDを任意のものに置換して利用すれば指定したスプレッドシートのシートをPDF化することが可能です。
なお、上記はフォーマットをPDFに指定しているだけですが、この他にも用紙サイズや縦横での出力などをオプションで指定可能です。これを利用してPDF作成を行う関数になります。

上に載せたcreatePDFという名前のPDF作成用の関数では、以下を引数として取ります。

  • folderid : 保存先フォルダID
  • ssid : PDF化するスプレッドシートID
  • sheetid : PDF化するシートID
  • filename : 作成したPDFにつけるファイル名


そして以下の部分でPDF作成時のオプションを指定しています。

上記のurl_extは単純にoptsの中身である各項目と値を=で繋げているだけです。例えば、exportFormatと対応する値であるpdf=で繋げて、exportFormat=pdfという文字列を作成してurl_ext配列に格納しています。そしてそれを各項目に繰り返しています。
つまりurl_extは以下のような配列になっています。


そして後はurl_extの各要素を今度は&で繋げます。そして最終的にoptionsは以下のようになります。


つまりここでは単に以下のようURLを作成しているだけになります。



なので最初からoptionsを上記のようにオプションを並べてしまっても同じです。ここでは、見やすさのために上記のように=&で繋げる処理をしているだけになります。

そして後は作成したURLによって生成されるPDFのデータをUrlFetchApp.fetchで取得して、それをblobという変数に格納、最後にGoogleドライブのフォルダIDで指定したフォルダに保存しています。blobというのは、Google Apps Script上で使用するデータ形式で大体このblob形式でデータを保存しておいて、後々これを色々なデータ形式で出力するようです。まだまだ理解が不足しているのでそのうち詳細を確認して載せます。

動作確認

動作確認のために、スクリプトエディタのメニューからスクリプトを実行してももちろんOKです。実行すると指定したフォルダにPDFが作成されるはずです。初めて実行する場合は許可を求められるのでOKしてください。なお、スプレッドシートでは、メニューの中に独自のメニューを追加することができます。具体的には以下のようにメニューに任意の名前で追加できます。以下の「スクリプト」→「Create PDF」は上に載せたmyFunctionに結びつけてあります。
add_menu


上記のようにメニューを追加するには、以下のようにGoogle Apps Script側で用意されているonOpenという関数を利用します。


このonOpen関数は、スプレッドシートが開かれた時点で実行される関数です。この関数内に、現在開いているスプレッドシートのメニューに「スクリプト」という項目を追加して、その中に「Create PDF」という項目を追加しています。そしてこの「Create PDF」は上で載せたmyFunctionに結びついているので、メニューからmyFunctionを実行できるようになります。動作確認用だけでなく、スクリプトなどを知らない方に利用してもらう際にも便利です。

なお、onOpenなどの用意されている関数は以下の公式ページ(英語)に載っています。

Simple Triggers | Google Apps Script


メニューを複数追加したい場合は、以下のようにentriesの中身に追記すればOKです。


まとめ

ここで載せたPDF作成用の関数を作っておけば、あとは好きなタイミングで呼び出して色々と応用できると思います。for文で複数のPDFやCSVファイルを一度に作成することも可能です。また、特定のシートからデータを取得して指定したスプレッドシートに挿入し、その上でPDF化けるなどももちろん可能です。特定のデータを指定したシート間でやりとりするスクリプトについてはまた載せたいと思います。

このエントリーをはてなブックマークに追加

SPONSORED LINK

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL