特定のスプレッドシートをPDF化する際によく使うGASの例です。
PDF化自体はスプレッドシートのURL末尾に「/export?format=pdf」を追加してアクセスするだけで自動的にダウンロードまでできてしまいますが、ここではオプション設定付きでPDFファイルを生成し、ドライブ保存とメール添付までの一連の流れを自動化する際に
オプション設定付きでPDF生成
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sh = ss.getActiveSheet();
const ssId = ss.getId();
const shId = ss.getActiveSheet().getSheetId();
const fileName = "テストファイル";
const folderID = '保存先のフォルダID';
//PDF化のための基本的なURL
let baseUrl = "https(←要半角変更)://docs.google.com/spreadsheets/d/"
+ ssId
+ "/export?gid="
+ shId;
//オプション設定項目
let pdfOptions = "&exportFormat=pdf&format=pdf"
+ "&size=A4" //用紙サイズ (A4)
+ "&portrait=true" //用紙の向き true: 縦向き / false: 横向き
+ "&fitw=true" //ページ幅を用紙にフィットさせるか true: フィットさせる / false: 原寸大
+ "&top_margin=0.50" //上の余白
+ "&right_margin=0.50" //右の余白
+ "&bottom_margin=0.50" //下の余白
+ "&left_margin=0.50" //左の余白
+ "&horizontal_alignment=CENTER" //水平方向の位置
+ "&vertical_alignment=TOP" //垂直方向の位置
+ "&printtitle=false" //スプレッドシート名の表示有無
+ "&sheetnames=false" //シート名の表示有無
+ "&gridlines=false" //グリッドラインの表示有無
+ "&fzr=false" //固定行の表示有無
+ "&fzc=false" //固定列の表示有無
//PDFを作成するためのオプションを含めた完成形URL
const url = baseUrl + pdfOptions;
//アクセストークンの取得
const token = ScriptApp.getOAuthToken();
//headersにアクセストークンを格納する
let options = {
headers: {
'Authorization': 'Bearer ' + token
}
};
//PDFを作成する
const blob = UrlFetchApp.fetch(url, options).getBlob().setName(fileName + '.pdf');
const file = DriveApp.getFolderById(folderID).createFile(blob);
const fileId = file.getId(); //新規ファイルのIDを取得する・メール添付時に使用
保存先フォルダ作成例
ドライブ内の「請求書/年-月/」のフォルダに保存する例
const rootName = '請求書';
const folderName = Utilities.formatDate(new Date(), 'JST', 'yyyy-MM');
const roorFolder0 = DriveApp.getRootFolder();
const roorFolder = DriveApp.getRootFolder().getFoldersByName(rootName);
const folderIterator = roorFolder.next().getFoldersByName(folderName);
//請求書フォルダがなければ作成してサブフォルダ年-月フォルダも作成
//保存先のID( ここではfolderId )
if (!roorFolder.hasNext()) {
let targetFolder = roorFolder0.createFolder(rootName);
folderId1 = targetFolder.getId();
targetFolder = DriveApp.getFolderById(folderId1).createFolder(folderName);
folderId = targetFolder.getId();
} else {
const folderId1 = roorFolder.next().getId();
if (!folderIterator.hasNext()) {
targetFolder = DriveApp.getFolderById(folderId1).createFolder(folderName);
folderId = targetFolder.getId();
} else {
folderId = folderIterator.next().getId();
}
}
ファイルのメール添付
//メール内容
let recipient = "example@gmail.com"; // 宛先メールアドレス
let subject = "件名です"; // 件名
let body = "本文です"; // 本文
//添付ファイルの準備
//fileIdは上記の作成されたPDFファイルID
let attachmentFile = DriveApp.getFileById(fileId).getBlob();
let options = {
attachments :attachmentFile,
};
//送信
GmailApp.sendEmail(recipient, subject, body, options);