【Googleドキュメント】Apps Scriptで複数Docsをマージ!章順の制御

【Googleドキュメント】Apps Scriptで複数Docsをマージ!章順の制御
🛡️ 超解決

複数のGoogleドキュメントを1つのファイルにまとめる作業に手間取っていませんか。特に、章ごとに別々のドキュメントを作成した場合、後で順序を整えて結合するのは大変です。この記事では、Apps Scriptを使って複数のドキュメントを自動でマージし、章の順序を自由に制御する方法を解説します。スクリプトの具体的な書き方と実行手順を丁寧に紹介しますので、ぜひ参考にしてください。

【要点】Apps Scriptで複数Docsをマージし、章順を配列で制御する方法

  • DocumentApp.openById(id): 対象のドキュメントを開くメソッドです。スクリプトで操作する最初のステップとして使用します。
  • getBody().appendParagraph(): 開いたドキュメントの本文に段落を追加するメソッドです。他のドキュメントの内容を1行ずつコピーするのに使います。
  • 配列で順序を定義: マージするドキュメントのIDを配列に格納し、その順番をそのまま結合順とします。章順の制御が簡単になります。

ADVERTISEMENT

Apps Scriptでドキュメントマージができる仕組み

Apps ScriptはGoogleのサービスを自動化するクラウドベースのスクリプト言語です。DocumentAppサービスを利用すると、Googleドキュメントの作成や編集をプログラムから行えます。複数のドキュメントをマージするには、各ドキュメントの本文を読み取り、新しいドキュメントに段落を追加していきます。この方法なら、手動でコピー&ペーストを繰り返す必要はありません。スクリプトを実行するだけで、指定した順番に内容を結合できます。

スクリプトを使うためには、Googleアカウントでログインした状態で、ドキュメントの「拡張機能」メニューからスクリプトエディタを開きます。そこで自分でコードを記述して実行します。承認が必要な場合がありますが、初回のみ許可すれば以降はスムーズに動作します。

複数ドキュメントをマージする基本手順

ここでは、最もシンプルなマージスクリプトを作成します。まず、マージしたいドキュメントのIDを取得し、スクリプトに記述します。以下の手順に従って進めてください。

ステップ1: スクリプトエディタを起動する

  1. ドキュメントを開く
    マージ先となる新しいドキュメントを用意します。このドキュメントに各章の内容が結合されます。
  2. スクリプトエディタを開く
    メニューの「拡張機能」から「Apps Script」をクリックします。空のスクリプトファイルが表示されます。

ステップ2: マージするドキュメントのIDを取得する

  1. 各ドキュメントのURLを確認
    マージしたいドキュメントをブラウザで開き、URLの「d/」と「/edit」の間にある英数字の文字列がIDです。これをメモします。
  2. IDの例
    URLが「https://docs.google.com/document/d/1AbcDefGhIjKlMnOpQrStUvWxYz/edit」の場合、IDは「1AbcDefGhIjKlMnOpQrStUvWxYz」です。

ステップ3: スクリプトコードを記述する

  1. コードを記述する
    以下のスクリプトをエディタに貼り付けます。関数名はmergeDocsとします。
function mergeDocs() {
  // マージ先のドキュメントID (新しいドキュメント)
  var targetId = 'あなたのマージ先ドキュメントID';
  // マージ元のドキュメントIDを配列で指定 (順序通りに結合)
  var sourceIds = [
    '章1のドキュメントID',
    '章2のドキュメントID',
    '章3のドキュメントID'
  ];
  var targetDoc = DocumentApp.openById(targetId);
  var targetBody = targetDoc.getBody();
  for (var i = 0; i < sourceIds.length; i++) {
    var sourceDoc = DocumentApp.openById(sourceIds[i]);
    var sourceBody = sourceDoc.getBody();
    var paragraphs = sourceBody.getParagraphs();
    for (var j = 0; j < paragraphs.length; j++) {
      var text = paragraphs[j].getText();
      if (text !== '') {
        targetBody.appendParagraph(text);
      }
    }
  }
}

ステップ4: スクリプトを実行する

  1. 実行して承認
    ツールバーの「実行」ボタンをクリックします。初回は権限の承認を求められますので、「許可」をクリックします。
  2. 結果を確認
    スクリプトが正常に終了すると、マージ先のドキュメントに各章の内容が順に追記されています。

章順を制御する方法

先ほどのスクリプトでは、sourceIds配列の順番がそのまま結合順になります。この配列を変更するだけで、簡単に章の順序を制御できます。また、特定の章だけを結合したい場合も、配列から該当のIDを削除するだけです。

配列の順番を変える

例えば、章2を最初に持ってきたい場合は、sourceIdsの先頭に章2のIDを移動します。以下のように記述します。

var sourceIds = [
  '章2のドキュメントID',
  '章1のドキュメントID',
  '章3のドキュメントID'
];

この変更だけで、結合後のドキュメントは章2から始まります。

条件に応じて動的に順序を変更する

スクリプト内で配列を並べ替える関数を組み込めば、より柔軟な制御が可能です。例えば、ドキュメントのタイトルや作成日時でソートすることもできます。ただし、この記事では基本的な配列操作に限定して説明します。

ADVERTISEMENT

注意点とよくあるエラー

権限エラーが発生する場合

スクリプトを実行するには、対象のドキュメントへのアクセス権が必要です。マージ元とマージ先のドキュメントがすべて自分が編集可能な状態であることを確認してください。特に、他のユーザーから共有されたドキュメントは、適切な権限がないとエラーになります。

大量のドキュメントを扱う際の制限

Apps Scriptには1回の実行時間に制限があります(通常6分)。あまりに多くのドキュメントを一度にマージしようとすると、タイムアウトする可能性があります。その場合は、分割して実行するか、処理を最適化してください。

書式が失われる問題

上記のスクリプトは段落のテキストのみをコピーするため、太字や箇条書き、表などの書式は保持されません。書式も維持したい場合は、より高度なスクリプトが必要です。例えば、getParagraphs()の代わりにgetChildElements()を使用して、要素の種類を判断しながらコピーする方法があります。

手動マージとスクリプトマージの比較

項目 手動マージ スクリプトマージ
作業時間 ドキュメント数に比例して増加 数秒で完了
順序制御 手動で並べ替えが必要 配列の順序で簡単変更
再現性 毎回手作業でミスのリスク スクリプトを実行するだけ
書式維持 手動で調整可能 追加のコードが必要

まとめ

この記事では、Apps Scriptを使って複数のGoogleドキュメントを自動でマージする方法を紹介しました。sourceIds配列の順序を変更するだけで、章の順序を自由に制御できます。初めは基本のスクリプトを試し、必要に応じて書式維持やエラー処理を追加してみてください。また、同様のテクニックは、報告書の自動生成やテンプレートの結合などにも応用できます。ぜひ、実際のプロジェクトで活用してみてください。


ADVERTISEMENT

📄
Googleドキュメントトラブル完全解決データベースこの記事以外にも、書式・共有・Apps Script・引用など様々な困りごとへの解決策をまとめています。逆引きに活用してください。
この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。

SPONSORED