【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ドライブ上の指定のフォルダに保存
という感じ。オプションの設定の書式がちょっと込み入った感じになりますが、やること自体は単純です。
この記事が気に入ったらサポートをしてみませんか?