MENU

GASでドキュメントの複数の文字を置換する(replace)テンプレート

GASでGoogleドキュメントの文字を置換する記事のアイキャッチ画像
悩む男性

Googleドキュメントの複数の文字列を、自動で一括置換するGASないかな?

Googleドキュメントでつくった文書をテンプレート化して、使いまわしたいとき、日付や名前を手作業で打ち込むのは面倒ですよね。

標準の置換機能だと、1単語ずつしか置換できないので、時間がかかります。

そこでこのページでは、Googleスプレッドシートを使って、Googleドキュメントの複数の文字列を一括置換するGASプログラムを紹介します。

すぐに使えるテンプレートファイルは、以下のリンクからアクセスできます。原本を複製して使ってみてください。

【原本】置換する文字列の設定シート
【原本】文字列置換ドキュメント

目次

文字列置換GASの使い方

文字列置換GASの使い方を解説していきます。

STEP
原本を複製する
STEP
文字列置換ドキュメントのURLを「ドキュメントURL」シートのB1セルに貼る
GASでGoogleドキュメントの文字を置換する手順1
STEP
文字列置換ドキュメントに置換対象の変数を入力する

ドキュメントの中に、置換対象となる変数を入力します。

変数と通常の文章を識別するために、変数を{}で囲んでください。

この{}がないと、変数以外の場所も置換されてしまう恐れがあります。

GASでGoogleドキュメントの文字を置換する手順2
STEP
「置換したい文字列」シートのA列に変数を入力する

「置換したい文字列」シートのA列に、変数を入力します。

ドキュメントの上部にある変数から入力していくと、わかりやすいと思いますよ。

GASでGoogleドキュメントの文字を置換する手順3
STEP
「置換したい文字列」シートのA列に置換後の文字列を入力する

「置換したい文字列」シートのB列に、置換後の文字列を入力します。

GASでGoogleドキュメントの文字を置換する手順4
STEP
必要なら、C〜E列に変数の場所や内容、例を入力する

C〜E列には、それぞれ変数の場所と内容、例を入力できます。

自分以外の人とこのシートを共有する場合などに、使ってください。

GASでGoogleドキュメントの文字を置換する手順5
STEP
[GASメニュー]>[変数を文字列に置換する]をクリックする

「置換したい文字列」シート上部の[GASメニュー]をクリックして[変数を文字列に置換する]をクリックします。

GASでGoogleドキュメントの文字を置換する手順6
STEP
Google承認画面を進めていく

初めてこのGASを実行する場合、以下のような画面が表示されます。

GASの実行を承認するための画面1

[続行]をクリックして、画面の指示に従って、承認を進めてください。

Googleの承認画面の詳しい説明は以下のページで解説しています。

画像付きで解説しているので、参考にしてみてください。

承認が終わったら、再び[GASメニュー]>[変数を文字列に置換する]をクリックして、GASを実行します。

STEP
ドキュメント上の変数が置換される

GASの実行が終わると、ドキュメント上の変数が文字列に置換されます。

GASでGoogleドキュメントの文字を置換する手順7
オレンジ文字が置換された

GASのコード解説

このGASのプログラムは以下のとおりです。

/**
 * 使い方
 * 1. 「ドキュメントURL」シートに、変数が書かれたGoogleドキュメントのURLを貼る
 * 2. メニューバーの「GASメニュー」から「変数を文字列に置換する」をクリックする
 * 3. Googleドキュメントの変数が置換される
 */
/**
 * Googleドキュメント内の変数をスプレッドシートのデータで置換します。
 */
function replaceVariablesInDocs() {
  try {
    const docUrl = fetchDocumentUrl_();
    if (!docUrl) {
      Browser.msgBox('注意', '「ドキュメントURL」シートのB1セルに、GoogleドキュメントのURLを入力してください。\\nその後、再びGASを実行してください。', Browser.Buttons.OK);
      return;
    }

    const doc = DocumentApp.openByUrl(docUrl);
    const body = doc.getBody();
    const variables = fetchVariablesFromSpreadsheet_();

    replaceTextInDocument_(body, variables);
  } catch (error) {
    Logger.log('エラーが発生しました: ' + error);
    Browser.msgBox('エラー', '処理中にエラーが発生しました。詳細はログを確認してください。\\n\\n' + error, Browser.Buttons.OK);
  }
}

/**
 * GoogleドキュメントのURLを「ドキュメントURL」シートから取得します。
 * @return {string} ドキュメントのURL
 */
function fetchDocumentUrl_() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const urlSheet = spreadsheet.getSheetByName('ドキュメントURL');
  return urlSheet.getRange(1, 2).getValue();
}

/**
 * スプレッドシートから変数と文字列のペアを取得します。
 * @return {Array.<Array.<string>>} 変数の配列
 */
function fetchVariablesFromSpreadsheet_() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const variablesSheet = spreadsheet.getSheetByName('置換したい文字列');
  const dataRange = variablesSheet.getDataRange();
  const rawData = dataRange.getDisplayValues();
  
  return rawData.slice(1); // ヘッダー行を除外
}

/**
 * ドキュメント内のテキストを置換します。
 * @param {GoogleAppsScript.Document.Body} body - ドキュメントのボディオブジェクト
 * @param {Array.<Array.<string>>} variables - 変数の配列
 */
function replaceTextInDocument_(body, variables) {
  variables.forEach(variable => {
    const searchString = '{' + variable[0] + '}';
    const replaceString = variable[1];

    if (replaceString !== "") {
      body.replaceText(searchString, replaceString);
    }
  });
}

このプログラムではreplaceメソッドを使っています。

このGASの大まかな流れはこんな感じです。

  • ドキュメントを取得する
  • スプレッドシート上の「変数」と「置換後の文字列」を取得する
  • ドキュメント上の変数を文字列に置換する

これ以外にも、 GASでお困りの場合は、以下のページからご相談ください。

参考にしたページ

ご質問があれば、コメント欄からお問い合わせください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

目次