// 関数を実行するタブをメニューバーに追加
function onOpen() {
var ui = SpreadsheetApp.getUi();
var menu = ui.createMenu('効率化');
menu.addItem('アクティブなスプレッドシートのPDF化', 'createPdf');
menu.addToUi();
}
/**
* 現在開いているシートよりPDFを出力
*/
function createPdf() {
// アクティブなスプレッドシートIDを取得
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const spreadsheetId = spreadsheet.getId();
// アクティブなシートID
const gid = spreadsheet.getActiveSheet().getSheetId();
// スプレッドシートのあるフォルダ
const folder = DriveApp.getFileById(spreadsheetId).getParents().next();
// シート名を取得
const name = spreadsheet.getName().replace('.xlsm', '');
// 出力するPDFファイル名
const fileName = `${name}_${Utilities.formatDate(new Date(), 'JST', 'yyyyMMdd')}.pdf`;
// 出力オプション
var opts = {
'exportFormat' : 'pdf', // ファイル形式の指定 (pdf / csv / xls / xlsx)
'format' : 'pdf', // ファイル形式の指定 (pdf / csv / xls / xlsx)
'size' : 'A4', // 用紙サイズの指定 (legal / letter / A4)
'portrait' : 'true', // 用紙の向き (true : 縦向き / false : 横向き)
'fitw' : 'true', // 幅を用紙に合わせるか (true : 合わせる / false : 合わせない)
'sheetnames' : 'false', // シート名をPDF上部に表示するか (true : 表示する / false : 表示しない)
'printtitle' : 'false', // スプレッドシート名をPDF上部に表示するか (true : 表示する / false : 表示しない)
'pagenumbers' : 'false', // ページ番号の有無 (true : 表示する / false : 表示しない)
'gridlines' : 'false', // グリッドラインの表示有無 (true : 表示する / false : 表示しない)
'fzr' : 'true', // 固定行の表示有無 (true : 表示する / false : 表示しない)
'top_margin' : 0.8,
'bottom_margin': 0.8,
'left_margin' : 0.7,
'right_margin' : 0.7,
};
let urlExt = [];
// オプション名と値を「=」で繋げて配列に格納
for( optName in opts ){
urlExt.push( optName + '=' + opts[optName] );
}
// 各要素を「&」で繋げる
const options = urlExt.join('&');
// API使用のためのOAuth認証用トークン
var token = ScriptApp.getOAuthToken();
// URLの組み立て
const url = `https://docs.google.com/spreadsheets/d/${spreadsheetId}/export?gid=${gid}&${options}`;
// PDF作成
var response = UrlFetchApp.fetch(
url, {
headers: {'Authorization': 'Bearer ' + token}
}
);
// Blob を作成する
var blob = response.getBlob().setName(fileName);
// PDFを指定したフォルダに保存
folder.createFile(blob);
}