GAS(Google Apps Script):スプレッドシートの特定の範囲をPDFにする

スプレッドシートは、ダウンロード機能を使ってPDFにして保存できます。

スクリーンショット 2020-06-19 22.57.12

また、請求書や経費精算書などのスプレッドシート内の特定の範囲をPDFする場合は、GASでスクリプトを作成しておくと効率的です。
例えば、こちらの請求書のA1〜F20の範囲をPDFにする場合のスクリプトはこちらです。

スクリーンショット 2020-06-19 23.50.50

function createPDF() {
 
 const ss = SpreadsheetApp.getActiveSpreadsheet();  //アクティブなスプレッドシートを取得
 const ssid = ss.getId();  //スプレッドシートのIDを取得
 const sheet = ss.getActiveSheet();  //アクティブなシートを取得
 const sheetid = sheet.getSheetId();  //シートIDを取得
 const pdfRange = 'A1%3AF20';  //PDF化範囲
 
 //PDFをエクスポートするURL
 const url = "https://docs.google.com/spreadsheets/d/SSID/export?".replace('SSID', ssid);
 
 //PDF化オプションを設定
 const opts = {
   exportFormat: 'pdf',
   format:       'pdf',
   size:         'A4',    //出力するサイズ
   portrait:     'true',  //PDFファイルの向き。true:縦向き、false:横向き
   fitw:         'true',  //ページのフィット。true:フィット、false:原寸大
   sheetnames:   'false', //シート名。true:有り、false:無し
   printtitle:   'false', //ドキュメントのタイトル。true:有り、false:無し
   pagenumbers:  'false', //ページ番号。true:有り、false:無し
   gridlines:    'false', //グリッドライン。true:有り、false:無し
   fzr:          'false', //各ページの行見出し。true:含める、false:含めない
   range:        pdfRange,
   gid:          sheetid
 };
 
 //オプションを「&」で繋げる
 let url_ext = [];
 for( optName in opts ){
   url_ext.push( optName + '=' + opts[optName] );
 }
 const options = url_ext.join('&');

 //API使用のOAuth認証
 const token = ScriptApp.getOAuthToken();

 //セルA1とF1の値を取得してファイル名を設定
 const fileName = sheet.getRange('A1').getValue() + '_' + sheet.getRange('F1').getValue() + '.pdf';

 //PDF作成
 const pdf = UrlFetchApp.fetch(url + options, { headers: { 'Authorization': 'Bearer ' + token }, muteHttpExceptions: true }).getBlob().setName(fileName);

 //マイドライブ直下にPDFを保存
 DriveApp.getRootFolder().createFile(pdf);
 
}

PDF化する範囲(A3:F20)を指定するため、pdfRangeにA1%3AF20を設定しています。ただし、:はURLに使用できない文字のため、URLエンコードした文字である%3Aに置き換えています

また、スプレッドシートで挿入 > 図形描画で任意の図形を挿入し(下図だと「PDF作成」)、「スクリプトを割り当て」にて先程作成したスクリプトを設定すれば、図形をクリックしてスクリプトを実行できます。

スクリーンショット 2020-06-20 13.35.59






GAS中心に記事を書いています、よろしければサポートお願いします!!