スプレッドシートから定期レポートをPDFで自動作成する方法

こんにちは、GASおじです。今回は中小企業の経営者さんやフリーランスの方に向けて、Googleスプレッドシートのデータを使って定期的にPDFレポートを自動作成する方法を解説しようと思います。
おじさんもSaaS課金には厳しいので、できるだけGoogleアカウントの利用枠内、追加の専用SaaS料金なしで効率化したいところ。Apps Scriptの実行上限はありますが、うまく使えば十分便利ですよ。
なぜスプレッドシートからPDF自動作成?
スプレッドシートで日々の売上や業務データを管理している方は多いはず。でも、報告用のレポートを毎回手動でPDF化してメール送信…これが結構な手間ですよね。
そこでGAS(Google Apps Script)を使って、指定日時に自動でPDF化し、メールやGoogleドライブに保存する仕組みを作れば、時間短縮・ヒューマンエラーの削減に繋がります。
初期設定と必要権限の確認
Googleスプレッドシートを用意する
レポートの元データが入ったスプレッドシートを用意してください。既存データは消さずに、新しいシートやファイルを作成して結果を書き込みます。スクリプトエディタを開く
スプレッドシートのメニュー「拡張機能」→「Apps Script」でスクリプトエディタを開きます。必要な権限について
- Driveへのファイル作成・アクセス権
- Gmail送信権限(メール送信する場合)
- スプレッドシート編集権限(新しいシート追加など)installable triggerの設定
GAS単体の時間トリガーは実行時間が短く、頻度も制限されます。
スクリプトエディタの「トリガー」メニューから「時間主導型トリガー」を設定し、定期的にスクリプトが実行されるようにしましょう。個人情報の取り扱い
社内の個人情報や顧客情報を扱う際は、スクリプトのログや共有設定に注意しましょう。
Driveの共有設定は必要最小限のメンバーに限定してください。
バックアップとロールバックを考慮した安全設計
既存データを直接消したり更新するのはリスクが高いです。
おじさん流の定石は以下の通り:
- 元データはそのまま残す
- PDF化するデータは新しい日時付きシートにコピーしてから処理
- もしエラーが起きても元データは安全
- バックアップをDrive内で自動的に保存
- 何かあれば元のスプレッドシートから再度やり直せる
コード例:スプレッドシートの内容をPDF化し新ファイルで保存
以下は、元シートの指定範囲をコピーして新しい日時付きのシートに貼り付け、そのシートをPDF化してGoogleドライブに保存するサンプルコードです。
function createPdfReport() {
try {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sourceSheet = ss.getSheetByName('レポート元データ'); // 元データシート名
if (!sourceSheet) {
throw new Error('元データシートが見つかりません。');
}
// 日時付き新シート名作成
const timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
const newSheetName = 'レポート_' + timestamp;
// 新シート作成(既存のシートをコピーしてデータを移す)
const newSheet = ss.insertSheet(newSheetName);
// 元シートのデータ範囲を取得(例:A1:D50)
const range = sourceSheet.getRange('A1:D50');
const values = range.getValues();
// まとめて書き込み(batch write)
newSheet.getRange(1, 1, values.length, values[0].length).setValues(values);
// PDF化のためのファイル名
const pdfName = newSheetName + '.pdf';
// Driveのフォルダ(任意で指定。ルートに作成してもOK)
const folderName = '定期レポートPDF';
let folder = DriveApp.getFoldersByName(folderName);
let targetFolder;
if (folder.hasNext()) {
targetFolder = folder.next();
} else {
targetFolder = DriveApp.createFolder(folderName);
}
// PDF化のためのURL作成
const ssId = ss.getId();
const sheetId = newSheet.getSheetId();
const url_base = 'https://docs.google.com/spreadsheets/d/' + ssId + '/export?';
const exportUrl =
url_base +
'format=pdf' + // PDF形式
'&gid=' + sheetId +
'&size=A4' + // 用紙サイズ
'&portrait=true' + // 縦向き
'&fitw=true' + // 幅に合わせる
'&sheetnames=false&printtitle=false&pagenumbers=false' +
'&gridlines=false' +
'&fzr=false'; // 固定行列なし
// OAuthトークン取得
const token = ScriptApp.getOAuthToken();
// PDFファイルを取得しDriveに保存
const response = UrlFetchApp.fetch(exportUrl, {
headers: {
Authorization: 'Bearer ' + token,
},
muteHttpExceptions: true,
});
if (response.getResponseCode() !== 200) {
throw new Error('PDF生成に失敗しました。HTTPコード: ' + response.getResponseCode());
}
const blob = response.getBlob().setName(pdfName);
targetFolder.createFile(blob);
// 完了ログ
Logger.log('PDFレポートを作成しました: ' + pdfName);
} catch (e) {
Logger.log('エラーが発生しました: ' + e.message);
}
}
コスト削減の考え方と注意点
- この方法は追加のSaaS料金なし、Googleアカウントの利用枠内で動作します。
- Apps Scriptの実行時間やAPI呼び出し回数に制限があるため、超大量データや頻繁な実行には注意。
- 例えば、月4回のレポート作成で1回あたり手動作業に30分かかっていたとすると、
「30分×4回=2時間/月の作業削減」と仮定できます。 - 時給2000円換算なら、4000円/月の効率化。年間で約48,000円。
- もちろん環境によって差はありますが、手動作業削減によるコスト軽減の一例です。
復元手順とメンテナンス
- もしスクリプトに不具合や誤動作があった場合は、
- まずログを確認しエラー箇所を特定
- 新規作成した日時付きシートやPDFファイルは元の元データに影響しないため安全
- 変更履歴やバックアップを使い、元データを復元可能
- トリガー設定の変更やスクリプトのバージョン管理も必ず行いましょう。
- 定期的にスクリプトの動作確認をするのがおすすめです。
まとめ
- Googleスプレッドシートのデータを元に、日時付きの新しいシートを作成し、そこからPDFファイルを生成・Drive保存する方法を紹介しました。
- 既存データを直接消さず、batch writeで安全に処理することでリスクを抑えています。
- 追加のSaaSコストなし、Googleアカウント利用枠内でできるのは大きなメリット。
- installable triggerで定期実行を設定すれば、完全自動化も可能です。
ぜひ自社の業務効率化に役立ててくださいね。