![見出し画像](https://assets.st-note.com/production/uploads/images/103333826/rectangle_large_type_2_2647aa56db20fd8f8b3d58689f9dab2b.png?width=1200)
Photo by
190318start
【appscript】スプレットシートの内容をPDF化し、指定のフォルダに保存
スクリプトの共有
カスタマイズ方法
スクリプトの共有
まずは以下のスクリプトを、Appscriptにコピペしてください。カスタマイズ方法は次のセクションに共有します。
function savePdf(){
//確認メッセージボックス(必要ない方は削除してください)
//「キャンセル」でPDF出力を停止する。
let confirmation = Browser.msgBox("本当にPDFを作成しますか?", Browser.Buttons.OK_CANCEL);
if(confirmation == "cancel") {
Browser.msgBox("PDF作成をキャンセルしました。");
return;
}
//PDFの保存先
let folderId = "XXXXXXXX";
//現在のスプレットシートを取得
let ss = SpreadsheetApp.getActiveSpreadsheet();
let ssId = ss.getId();
let shId = ss.getActiveSheet().getSheetId();
//セルの日付を取得する
let fileNum1 = ss.getActiveSheet().getRange("ここにセルを指定").getValue();
//セルの従業員名を取得する
let fileNum2 = ss.getActiveSheet().getRange("ここにセルを指定").getValue();
// 日付のフォーマットを読みやすく変更
fileNum1 = Utilities.formatDate(fileNum1,"JST", "yyyy-mmdd");
//PDFのファイル名を入力してください
let fileName = fileNum1+"_経費精算書_"+fileNum2;
//関数createPdfを実行し、PDFを作成して保存する
createPdf(folderId, ssId, shId, fileName);
}
function createPdf(folderId, ssId, shId, fileName){
//PDFを作成するためのベースとなるURL
let baseUrl = "https://docs.google.com/spreadsheets/d/"
+ ssId
+ "/export?gid="
+ shId;
//PDFのオプションを指定
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" //固定列の表示有無;
+ "&range=XXXXX%3AXXX" //範囲の指定(%3Aで指定します)
//PDFを作成するためのURL
let url = baseUrl + pdfOptions;
//アクセストークンを取得する
let token = ScriptApp.getOAuthToken();
//headersにアクセストークンを格納する
let options = {
headers: {
'Authorization': 'Bearer ' + token
}
};
//PDFを作成する
let blob = UrlFetchApp.fetch(url, options).getBlob().setName(fileName + '.pdf');
//PDFの保存先フォルダー
//フォルダーIDは引数のfolderIdを使用します
let folder = DriveApp.getFolderById(folderId);
//PDFを指定したフォルダに保存する
folder.createFile(blob);
}
カスタマイズ方法
① 保存先のフォルダを指定
フォルダ🆔の探し方ですが、Google Driveのフォルダを開き、URLの最後の部分(以下太文字)
「https://drive.google.com/drive/u/0/folders/XXXXXXXX」
//PDFの保存先
let folderId = "XXXXXXXX";
② 保存ファイル名の指定
まずは、ファイル名に必要な情報をスプレットシートから引き出します。
以下の例では「日付」と「従業員名」を引き出しています。
//セルの日付を取得する
let fileNum1 = ss.getActiveSheet().getRange("ここにセルを指定").getValue();
//セルの従業員名を取得する
let fileNum2 = ss.getActiveSheet().getRange("ここにセルを指定").getValue();
日付のフォーマットを行います。Appscriptのデフォルトが合わなく、自分好みのフォーマットにしたい方はここで指定します。今回は「yyyy-mmdd」にしていますが、他に変更も可能です。
// 日付のフォーマットを読みやすく変更
fileNum1 = Utilities.formatDate(fileNum1,"JST", "yyyy-mmdd");
ファイル名を指定します。先ほどの「日付」と「従業員名」に加え、文字列の「経費精算書」を付け加えました。文字列の場合は「""」で囲う必要があります。
//★★★PDFのファイル名を入力してください★★★
let fileName = fileNum1+"_経費精算書_"+fileNum2;
③PDFのフォーマットをカスタマイズ
//PDFのオプションを指定
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" //固定列の表示有無;
+ "&range=ここにスタートセルを指定%3Aここに終了セルを指定"