見出し画像

【GAS】表示中のシートをPDFに出力する

実はSpreadSheetは、仕様に則って生成したURLにアクセスするだけでPDFとして出力できちゃうんですよ。便利ですね。その仕組みを使ってPDFを出力します。

Blob(一時ファイルみたいなもの)を作る

function createPdf(target_sheet, filename){

 // 各種idとトークンを取得
 let spreadsheet_id = SpreadsheetApp.getActiveSpreadsheet().getId();
 let gid = target_sheet.getSheetId();
 let token = ScriptApp.getOAuthToken();
 
 // PDF出力オプションを設定
 let pdfOptions = "&exportFormat=pdf&format=pdf"
     + "&portrait=true"
     + "&fitw=true"
     + "&horizontal_alignment=CENTER"
     + "&vertical_alignment=TOP"
     + "&printtitle=false"
     + "&sheetnames=false"
     + "&gridlines=false"

 // ダウンロード用URLを取得
 var url = "https://docs.google.com/spreadsheets/d/" + spreadsheet_id + "/export?gid=" + gid + pdfOptions;
 
 // アクセストークンをHTTPリクエストヘッダに設定
 let access_header = {
   headers: {'Authorization': 'Bearer ' +  token}
 };
 
 // blobを取得
 var blob = UrlFetchApp.fetch(url, access_header).getBlob().setName(filename+".pdf");
 
 return blob;
}

作ったblobをgoogleDriveに保存する


function saveBlob2Drive(blob, target_forder_id){
 let folder = DriveApp.getFolderById(target_forder_id);
 folder.createFile(blob);
}

ドライブのフォルダIDは、そのドライブを表示したときのURLの最後の/以降の文字列(https://drive.google.com/drive/folders/[ここの文字列])

大まかな流れとしては、

・SpredSheet(ファイル自体)のIDと、出力したいシートのIDを取得
・PDF出力オプションを設定(上で挙げた以外にももっとある。上記のサンプルはとりあえず「大体A4用に準備したシートをA4におさめて印刷する」仕様)
・IDとオプションからダウンロード用URLを生成
・アクセストークンを取得してリクエストヘッダに入れる
・ダウンロード用URLにアクセスして一時ファイルを取得
・一時ファイルを、googleドライブ上の指定のフォルダに保存

という感じ。オプションの設定の書式がちょっと込み入った感じになりますが、やること自体は単純です。

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