earthpg:GAS専門のプログラミングスクール

スムーズに解決!GASで複数シートのPDF出力&範囲指定オプションを活用する方法

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

GASでPDF出力の基礎をマスターしよう

GASを使ってスプレッドシートをPDFファイルとして出力する方法は、指定したURL内の設定を利用するんだ。

1. 基本的な設定

まずは、PDFを出力するための基本的なURLを作成してみる。


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;

  Logger.log(fullUrl);
}

このスクリプトは、現在のスプレッドシートからアクティブなシートをPDFで出力するためのURLを作成する。SpreadsheetApp.getActiveSpreadsheet()でスプレッドシートを取得し、sheet.getSheetId()でシートのIDを取得する。この情報を使ってPDFのURLを構築するんだ。

2. 複数シートのPDF出力

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


function exportMultipleSheetsAsPDF() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheetIds = spreadsheet.getSheets().map(sheet => sheet.getSheetId());

  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 + '&gid=' + sheetIds.join(',');

  Logger.log(fullUrl);
}

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

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

範囲指定を行い、より具体的な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:C10', // 任意の範囲を指定
    size: 'A4',
    portrait: false,
    fitw: true,
    gridlines: false,
  };

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

  Logger.log(fullUrl);
}

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

すごい!範囲指定もできて、オプションもいっぱい使えるんだね。これなら僕もGASでPDF出力をマスターできそう!
猫男
猫男
catman
catman
その調子だ。GASを使いこなせば、スプレッドシートの管理がかなり効率的になるはずだよ。

練習問題:GASでのPDF出力を試してみよう

以下の問題を解いて、GASでのPDF出力の知識を強化しよう。

  1. 指定したシート(シート名 “Budget”)をA3のサイズで横向きにPDF出力するスクリプトを作成してください。

解答・解説

以下は練習問題の解答だ。


function exportBudgetSheetAsPDF() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getSheetByName("Budget");
  if (!sheet) {
    Logger.log("シート 'Budget' が見つかりません。");
    return;
  }
  const sheetId = sheet.getSheetId();

  const url = 'https://docs.google.com/spreadsheets/d/' + spreadsheet.getId() + '/export?';
  const exportOptions = {
    format: 'pdf',
    gid: sheetId,
    size: 'A3',
    portrait: false,
    fitw: true,
  };

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

  Logger.log(fullUrl);
}

getSheetByName(“Budget”)で指定したシートを取得し、portrait: falseで横向き設定にしている。また、A3サイズで出力されるようにsize: ‘A3’を使用している。このスクリプトを動作させれば、指定の条件でPDF化ができる。