MENU

GASでスプレッドシートをPDF化・テンプレやサンプルコードつき

スプレッドシートのPDF化記事のアイキャッチ画像
悩む女性

スプレッドシートを自動でPDFにできたらなあ…

悩む男性

複数のシートを別々のPDFに分けられたらいいのになあ

スプレッドシートをPDFに変換したいとき、手作業で1シートずつしていたら、時間がかかると思います。

GASを使えば、数回のクリックでパッとPDFに変換できるんじゃないかと考えているかもしれませんね。

そこでこのページでは、スプレッドシートをPDF化するGASのテンプレートを配布したりGASのプログラムを解説したりします。

目次

すぐ使えるテンプレートファイル

悩む男性

自分でコードを書く時間はないから、完成版がほしい!

時間がないときは、自分でコードを書くのも面倒だと思うので、完成版を以下に用意しました。

複製して使ってみてください。

スプレッドシートをPDF化するための準備をする画面
スプレッドシートはこんな感じになってます

ちなみに、このGASで作れるPDFは以下の出力設定になっています。

設定を変更したい場合は、PDFの出力オプションを編集する方法を参考にしてくださいね。

  • 用紙サイズ:A4
  • 用紙の向き:横向き
  • ページ幅を用紙にフィットさせるか:フィットさせる
  • 上の余白:0.50
  • 右の余白:0.50
  • 下の余白:0.50
  • 下の余白:0.50
  • シート名の表示:なし
  • スプレッドシート名の表示:なし
  • ページ番号をどこに入れるか:入れない
  • スケール:ページに合わせる
  • 水平方向の位置:中央
  • 垂直方向の位置:中央
  • グリッドラインの表示:なし
  • 固定行の表示:なし
  • 固定列の表示:なし

ここからは、完成版の使い方を解説していきます。

STEP
スプレッドシートを複製する

「原本_GASでスプレッドシートのシートを1枚ずつPDFにする」を複製してください。

▼メニューバーの[ファイル]>[コピーを作成]をクリックします。

スプレッドシートを複製する手順1

▼複製先のフォルダを指定したら[コピーを作成]をクリックしましょう。

スプレッドシートを複製する手順2

新しいタブが開いて、複製されたスプレッドシートが表示されますよ。

STEP
B2とB3セルにURLを入力する

B2とB3セルに以下のURLを入力してください。

  • B2:PDF化したいスプレッドシートのURL
  • B3:PDFを保存するGoogle DriveのフォルダのURL
スプレッドシートをPDF化するための準備をする画面

▼こんな感じで、URLを入力します。

スプレッドシートをPDF化する手順1
STEP
シート名をファイル名にしておく

このGASでは、各シート名がPDFのファイル名になります。

もしシート名が「シート1」や「シート2」となっている場合は、希望のPDFファイル名に変更しておくのがいいと思います。

スプレッドシートをPDF化する手順5
STEP
メニューバーの[GASメニュー]>[スプレッドシートをPDF化する]をクリックする

[GASメニュー]をクリックすると[スプレッドシートをPDF化する]が表示されるので、クリックしましょう。

スプレッドシートをPDF化する手順2
STEP
GAS実行の承認をする

このGASを初めて実行する場合、このような画面が出てくると思います。

GASの実行を承認するための画面1

これは、このGASを実行してもいいかの承認を求める画面です。

[続行]をクリックしたら、あとは画面の指示に従って、クリックして進めていきます。

どうすればいいかわからない場合は、以下のページを参考にしてみてください。

画像付きで、解説していますよ。

STEP
承認が終わったら、再び[スプレッドシートをPDF化する]をクリックする

承認が終わったら、もう一度[GASメニュー]>[スプレッドシートをPDF化する]をクリックしてください。

GASが実行されます。

STEP
GASの実行が終わるまで待つ

「スプリプトを実行しています」と表示されている間は、しばらく待ちましょう。

最大で6分ほどかかることがあります。

スプレッドシートをPDF化する手順3
STEP
GASの実行が完了する

「スクリプトが終了しました」と表示されたら、PDF化が完了しています。

スプレッドシートをPDF化する手順4

対象のGoogle Driveを見てみましょう。

PDFが保存されているはずです。

▼今回はシート名を「シート1〜3」のまま、PDF化しました。

スプレッドシートをPDF化する手順6

GASのコード解説

このGASのプログラムは以下のとおりです。

/**
 * この関数は、スプレッドシートをPDF化し、指定のGoogle Driveに保存します。
 */
function saveSheetsAsPdf() {

  // 「PDF化準備」シートを取得する
  const prepSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('PDF化準備');

  // B2セルから「PDF化したいスプレッドシート」のURLを取得する
  const spreadsheetUrl = prepSheet.getRange('B2').getValue();

  // もしB2セルにURLが入っていなかったら、エラーを出し、処理を止める。
  if (!spreadsheetUrl) {
    Browser.msgBox('お願い','B2セルに「PDF化したいスプレッドシート」のURLを入力してください。',Browser.Buttons.OK);
    return;
  }

  // URLを使って「PDF化したいスプレッドシート」を開く
  const spreadsheet = SpreadsheetApp.openByUrl(spreadsheetUrl);
  // 「PDF化したいスプレッドシート」のIDを取得する
  const spreadsheetId = spreadsheet.getId();
  //スプレッドシート内すべてのシートを取得する
  const allSheets = spreadsheet.getSheets();


  // B3セルからGoogle DriveのフォルダURLを取得する
  const driveFolderUrl = prepSheet.getRange('B3').getValue();
  // もしB3セルにURLが入っていなかったら、エラーを出し、処理を止める。
  if (!driveFolderUrl) {
    Browser.msgBox('お願い','B3セルにPDFを保存するGoogle DriveのURLを入力してください。',Browser.Buttons.OK);
    return;
  }
  // URLからGoogle DriveフォルダIDを抽出する
  const driveFolderId = driveFolderUrl.toString().split('/folders/')[1];

  // すべてのシートに同じ処理をする
  allSheets.forEach((sheet) => {
    // Prepare the URL for generating PDF.
    let pdfUrl = preparePdfUrl(spreadsheetId, sheet.getSheetId());

    // PDFを取得するためにURLをfetchする
    let response = UrlFetchApp.fetch(pdfUrl, {
      headers: {
        'Authorization': 'Bearer ' +  ScriptApp.getOAuthToken()
      }
    });

    // PDF blobを取得し、PDFに名前をつける(形式:シート名.pdf)
    let pdf = response.getBlob().setName(sheet.getName() + '.pdf');

    // Google Driveのフォルダを取得する
    let folder = DriveApp.getFolderById(driveFolderId);

    // フォルダにPDFを作成する
    folder.createFile(pdf);

    // rate limit error (error 429)を回避するための6秒スリープ
    Utilities.sleep(6000);
  });
}

/**
 * この関数では、スプレッドシートのPDFを作るためのURLを準備します。
 *
 * @param {string} spreadsheetId - スプレッドシートのID
 * @param {string} sheetId - シートのID
 * @return {string} PDFを作るためのURL
 */
function preparePdfUrl(spreadsheetId, sheetId) {
  let url = 'https://docs.google.com/spreadsheets/d/' + spreadsheetId + '/export?format=pdf&id=' + spreadsheetId;
  
  // PDFの出力オプションをURLに追加する
  url += '&gid=' + sheetId
       + '&size=A4'//用紙サイズ (A4)
       + '&portrait=false'//用紙の向き true: 縦向き / false: 横向き
       + '&fitw=true'//ページ幅を用紙にフィットさせるか true: フィットさせる / false: 原寸大
       + '&top_margin=0.50'//上の余白
       + '&right_margin=0.50'//右の余白
       + '&bottom_margin=0.50'//下の余白
       + '&left_margin=0.50'//左の余白
       + '&sheetnames=false'//シート名の表示有無
       + '&printtitle=false'//スプレッドシート名の表示有無
       + '&pagenum=UNDEFINED'//ページ番号をどこに入れるか
       + '&scale=4'//1= 標準100%, 2= 幅に合わせる, 3= 高さに合わせる,  4= ページに合わせる
       + '&horizontal_alignment=CENTER'//水平方向の位置
       + '&vertical_alignment=CENTER'//垂直方向の位置
       + '&gridlines=false'//グリッドラインの表示有無
       + '&fzr=false'//固定行の表示有無
       + '&fzc=false';//固定列の表示有無

  return url;
}

/**
 * スプレッドシートを開いたときに、自動でメニューが表示されるようにする
 */
function onOpen() {
  var ui = SpreadsheetApp.getUi()
  
  //メニュー名を設定する
  var menu = ui.createMenu("GASメニュー");
  
  //メニューに実行ボタン名と関数を割り当てる
  menu.addItem("スプレッドシートをPDF化する","saveSheetsAsPdf");

  //スプレッドシートに反映する
  menu.addToUi();
}

GASの大まかな流れ

このコードの大まかな流れは、以下のとおりです。

  • 「PDF化準備」シートを取得する
  • B2セルから「PDF化したいスプレッドシート」のURLを取得する
  • 「PDF化したスプレッドシート」内のすべてのシートを取得する
  • B3セルからGoogle DriveのフォルダURLを取得する
  • すべてのシートをPDF化する
  • PDFをGoogle Driveの指定フォルダに保存する

スプレッドシートとGoogle DriveフォルダのURLさえ入れれば、すぐに使えますよ!

PDFの出力オプションの設定値

PDFに出力する際のオプション設定方法を解説します。

設定する項目がいくつかあるので、それぞれを表でまとめますね。

コード内容
sizeA3 / A4 / letterなど
portrait用紙の向き true:縦向き / false:横向き
fitwページ幅を用紙にフィットさせるか true:フィットさせる / false:原寸大
top_margin上の余白
right_margin右の余白
bottom_margin下の余白
left_margin左の余白
sheetnamesシート名をPDFに表示するか true:表示する / false:表示しない
printtitleスプレッドシート名をPDFに表示するか true:表示する / false:表示しない
pagenumページ番号を表示するか true:表示する / false:表示しない
scale1:標準100% / 2:幅に合わせる / 3:高さに合わせる / 4:ページに合わせる
horizontal_alinment水平方向の位置
vertical_alinment垂直方向の位置
gridlinesグリッドラインを表示するか true:表示する / false:表示しない
fzr固定行の表示有無 true:表示する / false:表示しない
fzc固定列の表示有無 true:表示する / false:表示しない
PDFの出力オプションの設定値

以下の項目は、シートの内容に応じて、変更する頻度が高いと思われます。

  • portrait
  • fitw
  • scale

必要に応じて、値を変更してみてくださいね。

このGASを作った経緯

私は業務委託で、Webスクール事業の事務業務の効率化サポートをしています。

毎月このスクールでは、受講者に成績表をPDFで配布しています。

以前は、スプレッドシートに受講者の人数分のシートを用意して、それらを手作業でPDF化していました。

1カ月に100人以上の成績表をつくるので、手作業でPDF化していると、非常に時間がかかります。

そこで、GASで自動化できないかと、私が相談を受けました。

さいごに

スプレッドシートをPDF化するGASプログラムを解説しました。

テンプレートファイルを使えば、すぐにPDF化できるので、試してみてくださいね。

もしも「この作業もGASでできるかな?」というお悩みをお持ちの場合は、コメント欄でおしえてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

目次