GAS(Google Apps Script):スプレッドシートの特定の範囲をPDFにする
スプレッドシートは、ダウンロード機能を使ってPDFにして保存できます。
また、請求書や経費精算書などのスプレッドシート内の特定の範囲をPDFする場合は、GASでスクリプトを作成しておくと効率的です。
例えば、こちらの請求書のA1〜F20の範囲をPDFにする場合のスクリプトはこちらです。
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作成」)、「スクリプトを割り当て」にて先程作成したスクリプトを設定すれば、図形をクリックしてスクリプトを実行できます。
GAS中心に記事を書いています、よろしければサポートお願いします!!