DocumentApp.openByIdでGoogleドキュメント自動化!定期レポート作成とメール送信

DocumentApp.openByIdでGoogleドキュメント自動化!定期レポート作成とメール送信

Google Apps Script (GAS) の DocumentApp.openById を活用して、Googleドキュメントの自動化処理を効率化しましょう。この記事では、特に定期レポート作成とメール送信の自動化に焦点を当て、実用的なコード例とトラブルシューティングをご紹介します。

DocumentApp.openByIdとは?

DocumentApp.openById(id) は、指定されたIDを持つGoogleドキュメントを開くためのGASの関数です。この関数を使うことで、スクリプトから特定のドキュメントにアクセスし、内容の編集、データの挿入、書式設定などを自動で行うことができます。

DocumentApp.openByIdの基本的な使い方

まず、GoogleドキュメントのIDを確認します。IDは、ドキュメントのURLに含まれています(例:https://docs.google.com/document/d/<ドキュメントID>/edit)。次に、以下のコードでドキュメントを開きます。

function openDocumentById(documentId) {
const doc = DocumentApp.openById(documentId);
Logger.log(doc.getName()); // ドキュメント名を表示
return doc;
}

定期レポート作成とメール送信の自動化

DocumentApp.openById を利用して、定期的にレポートを作成し、関係者にメールで送信するプロセスを自動化します。例えば、週次レポート、月次レポートなどを自動生成し、指定した宛先にPDF形式で送信できます。

実装例1:週次レポートの自動作成と送信

この例では、既存のテンプレートドキュメントをコピーし、最新のデータを挿入して、PDF形式でメール送信します。

function generateWeeklyReport() {
// テンプレートドキュメントのID
const templateId = "YOUR_TEMPLATE_DOCUMENT_ID";
// 新しいドキュメントの名前
const newDocName = "週次レポート_" + Utilities.formatDate(new Date(), "JST", "yyyyMMdd");

// テンプレートをコピーして新しいドキュメントを作成
const templateDoc = DocumentApp.openById(templateId);
const newDoc = templateDoc.makeCopy(newDocName);
const newDocId = newDoc.getId();

// 新しいドキュメントを開く
const doc = DocumentApp.openById(newDocId);
const body = doc.getBody();

// データを挿入(例:スプレッドシートからデータを取得して挿入)
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName("データシート");
const data = sheet.getDataRange().getValues();

// データの挿入処理(例:キーワード置換)
body.replaceText("{{売上}}", data[1][1]); // 2行2列目のデータを挿入
body.replaceText("{{顧客数}}", data[1][2]); // 2行3列目のデータを挿入

// ドキュメントをPDFとして保存
const pdfBlob = doc.getAs('application/pdf');

// PDFをメールで送信
const recipient = "test@example.com";
const subject = newDocName;
const bodyText = "週次レポートです。ご確認ください。";
const options = {
attachments: [pdfBlob],
name: '週次レポート自動送信'
};

MailApp.sendEmail(recipient, subject, bodyText, options);

// 作成したドキュメントを削除(必要に応じて)
DriveApp.getFileById(newDocId).setTrashed(true);
}

実装例2:特定の条件に基づいてドキュメントを更新しメール送信

スプレッドシートのデータに基づいてドキュメントの内容を更新し、特定の条件を満たす場合にのみメールを送信する例です。

function updateDocumentAndSendEmail() {
// ドキュメントIDとスプレッドシートIDを設定
const documentId = "YOUR_DOCUMENT_ID";
const spreadsheetId = "YOUR_SPREADSHEET_ID";

// スプレッドシートからデータを取得
const ss = SpreadsheetApp.openById(spreadsheetId);
const sheet = ss.getSheetByName("データ");
const data = sheet.getDataRange().getValues();

// ドキュメントを開く
const doc = DocumentApp.openById(documentId);
const body = doc.getBody();

// スプレッドシートのデータに基づいてドキュメントを更新
for (let i = 1; i < data.length; i++) { // 1行目はヘッダーと仮定
const row = data[i];
const keyword = row[0]; // キーワード
const value = row[1]; // 値

body.replaceText(keyword, value);
}

// 特定の条件を満たす場合にメールを送信
const condition = sheet.getRange("B2").getValue(); // B2セルの値を取得
if (condition > 100) {
// メール送信処理
const recipient = "test@example.com";
const subject = "ドキュメント更新通知";
const bodyText = "ドキュメントが更新されました。ご確認ください。";

MailApp.sendEmail(recipient, subject, bodyText);
}
}

よくある問題とトラブルシューティング

  • ドキュメントIDが間違っている:URLを再確認し、正しいIDを入力してください。
  • 権限の問題:スクリプトがドキュメントにアクセスする権限があることを確認してください。
  • タイムアウト:処理に時間がかかりすぎるとタイムアウトすることがあります。処理を分割するか、Utilities.sleep() を使用して一時停止を挿入してください。

カスタマイズ方法と応用例

  • 動的なデータ挿入:スプレッドシートや他のAPIから取得したデータを動的に挿入できます。
  • 条件分岐:特定の条件に基づいてドキュメントの内容を変更できます。
  • 複数のドキュメント操作:複数のドキュメントをまとめて処理できます。

まとめ

DocumentApp.openById を活用することで、Googleドキュメントの自動化処理を大幅に効率化できます。定期レポートの作成、データに基づいたドキュメントの更新、メール送信など、様々な業務に適用可能です。ぜひ、この記事で紹介したコード例を参考に、自動化を推進してください。