ADVERTISEMENT

【Googleドキュメント】Apps Scriptで本文の文字を一括置換!findText/replaceTextの使い方

【Googleドキュメント】Apps Scriptで本文の文字を一括置換!findText/replaceTextの使い方
🛡️ 超解決

Googleドキュメントで長文の資料を編集しているとき、特定の文字列を一括で置き換えたい場面があります。手動で一つひとつ直すのは時間がかかり、見落としも発生しやすいです。そんなときに役立つのが、Google Apps ScriptのfindTextメソッドとreplaceTextメソッドです。

この記事では、Apps Scriptを使ってGoogleドキュメントの本文全体を対象に、文字列を効率的に検索・置換する方法を解説します。コードの書き方から実際の実行手順、注意点までを具体的に説明しますので、初めての方でも安心して実践できます。

【要点】findTextとreplaceTextで文書全体の文字を一括置換する

  • DocumentApp.getActiveDocument().getBody(): アクティブなドキュメントの本文オブジェクトを取得します。
  • body.findText(“検索文字列”): 本文内で指定した文字列に一致する最初の範囲(RangeElement)を返します。
  • rangeElement.getElement().asText().replaceText(“検索文字列”, “置換後文字列”): 見つかった範囲のテキストを置換します。
  • whileループで全置換: 検索結果がなくなるまで繰り返すことで、文書全体のすべての該当文字列を置換できます。

ADVERTISEMENT

findTextとreplaceTextでできること

Apps ScriptのfindTextメソッドは、Googleドキュメントの本文内で指定した正規表現またはプレーンテキストに一致する範囲を検索します。一致箇所はRangeElementとして返され、その範囲に対してreplaceTextメソッドで置換を実行できます。

これらのメソッドを組み合わせると、文書全体の特定の単語やフレーズを一括で置き換えられます。手動の置換では見落としがちな箇所も確実に処理できるため、校正作業やテンプレートの修正に大いに役立ちます。

また、正規表現を使用すれば、パターンマッチングによる高度な置換も可能です。たとえば、すべての日付形式を統一する、余分な空白を取り除くなどの処理も自動化できます。

Apps Scriptで文字列を一括置換する手順

ここでは、実際のコードと操作方法をステップごとに説明します。スクリプトエディタの開き方から、コードの記述、実行までの流れをしっかり把握してください。

スクリプトエディタを開く

  1. Googleドキュメントを開く
    置換したいドキュメントをGoogleドライブから開きます。
  2. 拡張機能メニューを開く
    メニューバーから「拡張機能」をクリックし、「Apps Script」を選択します。
  3. スクリプトエディタが開く
    新しいタブでGoogle Apps Scriptのエディタが起動します。ここに関数を記述します。

コードを記述する

  1. 関数を定義する
    デフォルトでmyFunctionという空の関数があります。その中に処理を記述します。関数名は任意ですが、ここではreplaceTextInDocとします。
  2. 本文オブジェクトを取得
    var body = DocumentApp.getActiveDocument().getBody(); と記述して、アクティブなドキュメントの本文を取得します。
  3. 検索と置換のループを書く
    以下のコードを追加します。
    var searchText = "置換前の文字列";
    var replacement = "置換後の文字列";
    var rangeElement = body.findText(searchText);
    while (rangeElement != null) {
      rangeElement.getElement().asText().replaceText(searchText, replacement);
      rangeElement = body.findText(searchText);
    }
    
  4. コードを保存する
    CTRL+S(Windows)またはCmd+S(Mac)で保存します。プロジェクト名を求められたら適宜入力します。

関数を実行する

  1. 実行ボタンをクリック
    ツールバーの「実行」ボタン(▶)をクリックします。
  2. 権限を承認する
    初回実行時には、スクリプトがドキュメントにアクセスするための承認を求められます。表示されるダイアログに従い、アカウントを選択して「許可」をクリックします。
  3. 実行ログを確認
    エラーがなければ、ドキュメント内の指定した文字列がすべて置換されます。スクリプトエディタの「実行」メニューから「関数を実行」を選んでも同様に動作します。

注意点とよくあるトラブル

findText/replaceTextを使う際には、いくつかの注意点があります。以下に代表的な問題と対処法をまとめました。

正規表現のエスケープが必要な場合

findTextの第一引数は正規表現として解釈されます。そのため、検索文字列に「.(ドット)」や「*(アスタリスク)」などの特殊文字が含まれる場合、正しくマッチしません。特殊文字をそのまま検索したいときは、\\でエスケープするか、String.prototype.replaceを使って特殊文字をエスケープする関数を用意してください。

置換が一部しか行われない

whileループ内でbody.findText(searchText)を再度呼び出すときに、同じ箇所が繰り返し見つかる場合があります。これは、置換後も文字列が一致してしまう場合に発生します。たとえば、「aaa」を「aa」に置換すると、結果が「aa」になり、さらに検索されて「a」になるという無限ループが起こる可能性があります。このような場合は、置換後の文字列を工夫するか、検索を別の方法で行ってください。

スクリプトが途中で止まる

Apps Scriptには実行時間制限(6分)があります。非常に長いドキュメントや大量の置換を行うと、タイムアウトでスクリプトが中断されることがあります。その場合は、処理を分割するか、より効率的な正規表現を使うことを検討してください。

テキスト以外の要素は置換されない

findText/replaceTextは段落やテキストランのテキスト部分のみを対象とします。表の中のテキストやヘッダー・フッター、脚注などは置換されません。それらの要素も置換したい場合は、それぞれの子要素に対して個別にアクセスする必要があります。

ADVERTISEMENT

findTextとreplaceTextの使い分け比較

メソッド 戻り値 用途 使用例
findText RangeElement(最初の一致)またはnull 検索文字列の位置を特定する body.findText(“Google”)
replaceText 置換後のTextオブジェクト(数を返さない) 特定のテキスト範囲内の文字列を置換する element.asText().replaceText(“旧”, “新”)

まとめ

Google Apps ScriptのfindTextメソッドとreplaceTextメソッドを使えば、Googleドキュメント内の文字列を簡単かつ確実に一括置換できます。whileループを用いてすべての該当箇所を処理する方法は、手動置換の手間を大幅に削減します。

正規表現を使った高度な検索や、表・ヘッダー内のテキストへの対応など、さらに応用したい場合は、Bodyクラスの他のメソッドも組み合わせてみてください。定型的な文書修正作業を自動化することで、作業効率が格段に向上します。


ADVERTISEMENT

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

超解決 第一編集部

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