公式資料を参照して構成した手順です。本記事の操作・コードの実行は未確認です。小さな入力例で期待結果を確かめてから利用してください。
できあがるもの
実行ログは[[1,1,"受注手順"],[3,2,"確認"]]です。段落位置は1始まりで、標準テキストの2段落目と4段落目は含みません。見出しを本文中へ挿入したり、クリック可能な目次リンクを生成したりする処理ではありません。
始める前に
- 編集できる新規Googleドキュメントと、そこから拡張機能で開いた紐付け型Apps Scriptを使用します。文書は単一タブにし、架空の4段落だけを置きます。
- Documentサービスへのアクセス許可が必要です。共有文書や業務文書ではなく、自分の検証用コピーで認可と実行を行います。
文書に空行を挟まず4段落を作成します。1段落目「受注手順」を見出し1、2段落目「最初にコピーを作る」を標準テキスト、3段落目「確認」を見出し2、4段落目「件数を比べる」を標準テキストにします。太字にしただけの文字は見出しとして扱いません。
手順
- 新規の検証用Googleドキュメントに入力例の4段落を作り、各段落のスタイルを見出し1・標準テキスト・見出し2・標準テキストの順に設定します。表・ヘッダー・別タブを追加せず、本文だけの小さな文書にします。
- 文書の拡張機能からApps Scriptを開き、次のコードを保存します。スプレッドシートから開いたスクリプトではgetActiveDocumentが対象文書を返さないため、文書に紐付いたプロジェクトを使用してください。
function recipe() { const doc = DocumentApp.getActiveDocument(); if (!doc) throw new Error('Open the script from the test document'); const rows = []; doc.getBody().getParagraphs().forEach((paragraph, index) => { const h = paragraph.getHeading(); const level = h === DocumentApp.ParagraphHeading.HEADING1 ? 1 : h === DocumentApp.ParagraphHeading.HEADING2 ? 2 : h === DocumentApp.ParagraphHeading.HEADING3 ? 3 : 0; if (level) rows.push([index + 1, level, paragraph.getText()]); }); console.log(JSON.stringify(rows)); } - 関数recipeを手動実行し、必要なアクセス許可の対象が自分の検証用文書であることを確認します。実行ログのJSON配列を、段落番号・見出し階層・文字列の3項目として読みます。文書への書き込み、メール送信、時間トリガーの設定はありません。
- 期待値と照合します。続いてコピーの3段落目を標準テキストへ変え、再実行で確認の行がなくなることを確かめます。太字・フォントサイズだけでは結果が増えないことも確認し、元の文書の見出し設定と一覧を突き合わせます。
期待結果と照合する
実行ログは[[1,1,"受注手順"],[3,2,"確認"]]です。段落位置は1始まりで、標準テキストの2段落目と4段落目は含みません。見出しを本文中へ挿入したり、クリック可能な目次リンクを生成したりする処理ではありません。
まずこの入力例で確認し、件数や値が一致しているかを見ます。完了表示だけで判断せず、重複・空欄・対象外データも残っていないか確認してください。
うまくいかないとき
- getBodyを使うため、この例は単一タブの本文だけを対象とします。ヘッダー・フッターや複数タブを網羅した文書監査としては使わず、対象範囲を拡張するときはTabの仕様を別に確認してください。
- 段落番号は編集で変わる位置情報です。恒久的な文書IDや見出しリンクではありません。Google実環境での実行は未確認のため、4段落のダミー文書で期待値と一致することを確かめてから利用します。
止める・元に戻す
このコードは文書本文を変更しないため、出力結果から復元する操作は不要です。手動実行を止め、検証用文書とコードを閉じます。再試行は同じ4段落のコピーで行い、実行ログに業務情報を含めないようにします。
公式資料・対応範囲
参照日:2026-10-18。公式資料の一般的な機能説明と、本記事固有の入力例の実行検証は別です。実務での短縮時間や効果は未計測です。