【GAS入門】スプレッドシートをPDFとして出力する方法〜複数シート対応&範囲指定オプション活用法〜

GASでスプレッドシートの複数シートをPDF出力したいんだけど、やり方が全然わからないんだ。範囲指定もできるならやってみたいんだけど…
猫男
猫男
catman
catman
心配するな。catmanが「GASでのPDF出力」の秘訣を教えてあげよう。この技を覚えれば、きっと君の作業がスムーズになるさ。

GASでスプレッドシートをPDFとして出力する方法

よし、まずは基本的なことからやっていこう。

スクリプト

次のスクリプトを見てくれ。


function exportSheetAsPDF() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getActiveSheet();
  const sheetId = sheet.getSheetId();

  const url = 'https://docs.google.com/spreadsheets/d/' + spreadsheet.getId() + '/export?';

  const exportOptions = {
    format: 'pdf',
    gid: sheetId,
    size: 'A4',
    portrait: true,
    fitw: true,
    sheetnames: false,
  };

  const queryString = Object.keys(exportOptions)
    .map(key => key + '=' + exportOptions[key])
    .join('&');

  const fullUrl = url + queryString;

  const token = ScriptApp.getOAuthToken();

  const response = UrlFetchApp.fetch(fullUrl, {
    headers: {
      Authorization: 'Bearer ' + token,
    },
  });

  const blob = response.getBlob().setName(sheet.getName() + '.pdf');

  DriveApp.createFile(blob);
}

このスクリプトは、現在のスプレッドシートからアクティブなシートをPDFで出力するためのURLを作成してGoogleドライブのマイドライブ直下に保存するコードだ。

SpreadsheetApp.getActiveSpreadsheet()でスプレッドシートを取得し、sheet.getSheetId()でシートのIDを取得。

この情報でPDFのURLを構築するんだ。

そのURLをUrlFetchApp.fetch() でPDFデータを取得して、DriveApp.createFile() でGoogleドライブに保存しているぞ。

実践

さて、このコードを実際に実行するとどうなる??

試しにやってみるぞ。たとえば、このようなスプレッドシートがあってこのシート(名前はシート1)がアクティブになってるとする。

その場合、

gas pdf 出力

ほら、シート名の「シート1」をファイル名としてGoogle Driveのマイドライブ直下にファイルを保存できているぞ。

 

GASでスプレッドシートの複数シートをPDFとして出力する方法

次に、複数のシートを一つのPDFにまとめる方法を見てみよう。

スクリプト


function exportMultipleSheetsAsPDF() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  const url = 'https://docs.google.com/spreadsheets/d/' + spreadsheet.getId() + '/export?';

  const exportOptions = {
    format: 'pdf',
    size: 'A4',
    portrait: true,
    fitw: true,
    sheetnames: false,
    printtitle: false,
  };

  const queryString = Object.keys(exportOptions)
    .map(key => key + '=' + exportOptions[key])
    .join('&');

  const fullUrl = url + queryString;

  const token = ScriptApp.getOAuthToken();

  const response = UrlFetchApp.fetch(fullUrl, {
    headers: {
      Authorization: 'Bearer ' + token,
    },
  });

  const blob = response.getBlob()
    .setName(spreadsheet.getName() + '.pdf');

  DriveApp.createFile(blob);
}

ここでは、getSheets()メソッドで全てのシートのIDを取得し、カンマで区切ってURLに追加している。これで複数のシートを一つのPDFにまとめて出力可能だ。

実践

早速やってみよう。シート2が次のような文房具のシートだとする。

gas pdf 出力

すると、

gas pdf 出力

ほれ、文房具のシートが2ページ目として出力されているな。

で、PDFのファイル名は「spreadsheet.getName() + '.pdf'」となっているからスプレッドシートのファイル名になっている。

 

範囲指定とオプション設定

範囲指定を行い、より具体的なPDFを作成するためのオプション設定も重要だ。

スクリプト


function exportWithRangeAndOptions() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getActiveSheet();
  const sheetId = sheet.getSheetId();

  const url = 'https://docs.google.com/spreadsheets/d/' + spreadsheet.getId() + '/export?';

  const exportOptions = {
    format: 'pdf',
    gid: sheetId,
    range: 'A1:A10',
    size: 'A4',
    portrait: false,
    fitw: true,
    gridlines: false,
  };

  const queryString = Object.keys(exportOptions)
    .map(key => key + '=' + encodeURIComponent(exportOptions[key]))
    .join('&');

  const fullUrl = url + queryString;

  const token = ScriptApp.getOAuthToken();

  const response = UrlFetchApp.fetch(fullUrl, {
    headers: {
      Authorization: 'Bearer ' + token,
    },
  });

  const blob = response.getBlob()
    .setName(sheet.getName() + '_A1-A10.pdf');

  DriveApp.createFile(blob);
}

この例では、範囲をA1:A10に設定し、gridlines: falseでグリッドラインを非表示にするなどのオプションを設定している。

実践

実行すると、

gas pdf 出力

よし、範囲内のA列の商品名だけグリッドなしで出力できてるな。

 

すごい!範囲指定もできて、オプションもいっぱい使えるんだね。これなら僕もGASでPDF出力をマスターできそう!
猫男
猫男
catman
catman
その調子だ。オプションは次の表を参考にしてくれ

 

オプション 設定例 意味
format pdf 出力形式をPDFに指定します。
gid 123456789 PDF化するシートを指定します。通常は sheet.getSheetId() を使います。
range A1:C10 PDF化するセル範囲を指定します。
size A4 用紙サイズを指定します。
portrait true true で縦向き、false で横向きになります。
fitw true 横幅をページ幅に合わせて縮小します。
sheetnames false シート名をPDFに表示するかどうかを指定します。
printtitle false スプレッドシートのタイトルを表示するかどうかを指定します。
gridlines false セルの薄いグリッド線を表示するかどうかを指定します。
pagenumbers false ページ番号を表示するかどうかを指定します。
fzr false 固定行を各ページに繰り返し表示するかどうかを指定します。
top_margin 0.50 上余白を指定します。
bottom_margin 0.50 下余白を指定します。
left_margin 0.50 左余白を指定します。
right_margin 0.50 右余白を指定します。

 

サンキュー!
猫男
猫男
catman
catman
GASを使いこなせば、スプレッドシートの管理がかなり効率的になるはずだ。さらなる活躍を期待しているぞ

EARTHPG 自動化研究所

「その作業、仕組みにできます。」

Google Apps Script、Python、スプレッドシート自動化、WordPress開発、 API連携、AI活用まで対応。 小さな自動化から業務全体の設計まで、研究所が支援します。