見出し画像

【appscript】スプレットシートの内容をPDF化し、指定のフォルダに保存

  1. スクリプトの共有

  2. カスタマイズ方法

スクリプトの共有

まずは以下のスクリプトを、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ここに終了セルを指定"

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