スプレッドシートのPDF化と保存・メール添付

記事
学び
特定のスプレッドシートを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);

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す ココナラコンテンツマーケット ノウハウ記事・テンプレート・デザイン素材はこちら