見出し画像

【GAS】Google Apps Script - シートから請求書PDFを発行

今回はGASを使って、スプレッドシートの内容をPDF化して、Googleドライブ内にある指定のフォルダに保存する方法をご紹介します!

PDF化するシートの内容

今回はこちらの架空の請求書をPDF化します。

スクリーンショット 2021-05-25 23.49.03

スクリプトの作成

以下の内容にそって、スクリプトを作成し保存します。

/*  
* PDFの保存先となるフォルダの指定 
*/
let folderId = "ここに保存先となるフォルダIDを入力";
let folder = DriveApp.getFolderById(folderId); 

/*
* PDF化する対象のスプレッドシート
*/
let spreadsheetID = "ここに今回PDF化するスプレッドシートのIDを入力";
let spreadsheet = SpreadsheetApp.openById(spreadsheetID);

/*
* スプレッドシート内 対象シート
* 今回は「請求書」の名前がついているシートをPDF化します
*/
let sheetName = "請求書";
let sheet = spreadsheet.getSheetByName(sheetName);
let sheetID = sheet.getSheetId();

function savePdf() {
  
 /* 
 * ファイル名に使用する顧客名を取得
 * 今回のシートではB3セルに顧客名が入っています
 */
 let customerName = sheet.getRange("B3").getValue();
 Logger.log(customerName);
 
 //実行時の日時
 let date = new Date();
 
 //日時のフォーマットを指定
 let formattedDate = Utilities.formatDate(date, "JST", "yyyyMMddHHmm");
 Logger.log(formattedDate);
 
 //PDF作成用関数を実行してPDF化し、指定フォルダに保存
 createPDF( folder, spreadsheetID, sheetID, formattedDate + "_" + customerName );
 
}

 /*
 * PDF作成用関数
 * folder:保存先フォルダ
 * spreadsheetID:PDF化するスプレッドシートID
 * sheetID:PDF化するシートID
 * filename:PDFの名前
 */
function createPDF( folder, spreadsheetID, sheetID, filename) {

 // スプレッドシートをPDFにエクスポートするためのURL。このURLに色々なオプションを付けてPDFを作成
 let url = "https://docs.google.com/spreadsheets/d/spreadsheetID/export?".replace("spreadsheetID", spreadsheetID);

 // PDF作成のオプションを指定
 let opts = {
   exportFormat: "pdf",    // ファイル形式の指定 pdf / csv / xls / xlsx
   format:       "pdf",    // ファイル形式の指定 pdf / csv / xls / xlsx
   size:         "A4",     // 用紙サイズの指定 legal / letter / A4
   portrait:     "true",   // true → 縦向き、false → 横向き
   fitw:         "true",   // 幅を用紙に合わせるか
   sheetnames:   "false",  // シート名をPDF上部に表示するか
   printtitle:   "false",  // スプレッドシート名をPDF上部に表示するか
   pagenumbers:  "false",  // ページ番号の有無
   gridlines:    "false",  // グリッドラインの表示有無
   fzr:          "false",  // 固定行の表示有無
   gid:          sheetID   // シートIDを指定
 };
 
 //オプション内容の定義用
 let urlExt = [];
 
 // 上記のoptsのオプション名と値を「=」で繋げて配列urlExtに格納
 for( optName in opts ){
   urlExt.push( optName + "=" + opts[optName] );
 }

 // urlExtの各要素を「&」で繋げる
 let options = urlExt.join("&");

 // API使用のためのOAuth認証
 let token = ScriptApp.getOAuthToken();
 
 // PDF作成
 let response = UrlFetchApp.fetch(url + options, {
     headers: {
       'Authorization': 'Bearer ' +  token
     }, muteHttpExceptions: true
  });
 
 let blob = response.getBlob().setName(filename + '.pdf');

 // PDFを指定したフォルダに保存
 folder.createFile(blob);

}

// スプレッドシートのメニューからPDF作成用の関数を実行出来るように、「GAS実行」メニューを追加。
//トリガーにより起動時に動作
function onOpen() {
 //メニュー追加
 let entries = [       
       {
           name : "PDF作成",
           functionName : "savePdf"
       }
       ];
   spreadsheet.addMenu("GAS実行", entries);
};

関数 savePdfを実行することで、PDF化と指定フォルダへの保存ができます。

また、関数 onOpenに対して起動時に実行するようトリガーを設定することで、スプレッドシートのメニューバーからGASを実行することができます。

スクリーンショット 2021-05-26 0.23.19

GASを実行

メニューバーから「PDF作成」をクリックし、GASを実行します。保存先に指定したフォルダを確認すると、PDF化されたシートがちゃんと保存されていれば完了です!

スクリーンショット 2021-05-26 0.32.58

スクリーンショット 2021-05-25 23.55.32


この記事が気に入ったらサポートをしてみませんか?