Googleドキュメントの複数の文字列を、自動で一括置換するGASないかな?
Googleドキュメントでつくった文書をテンプレート化して、使いまわしたいとき、日付や名前を手作業で打ち込むのは面倒ですよね。
標準の置換機能だと、1単語ずつしか置換できないので、時間がかかります。
そこでこのページでは、Googleスプレッドシートを使って、Googleドキュメントの複数の文字列を一括置換するGASプログラムを紹介します。
すぐに使えるテンプレートファイルは、以下のリンクからアクセスできます。原本を複製して使ってみてください。
文字列置換GASの使い方
文字列置換GASの使い方を解説していきます。
文字列置換ドキュメントのURLを「ドキュメントURL」シートのB1セルに貼る
文字列置換ドキュメントに置換対象の変数を入力する
ドキュメントの中に、置換対象となる変数を入力します。
この{}がないと、変数以外の場所も置換されてしまう恐れがあります。
「置換したい文字列」シートのA列に変数を入力する
「置換したい文字列」シートのA列に、変数を入力します。
ドキュメントの上部にある変数から入力していくと、わかりやすいと思いますよ。
「置換したい文字列」シートのA列に置換後の文字列を入力する
「置換したい文字列」シートのB列に、置換後の文字列を入力します。
必要なら、C〜E列に変数の場所や内容、例を入力する
C〜E列には、それぞれ変数の場所と内容、例を入力できます。
自分以外の人とこのシートを共有する場合などに、使ってください。
[GASメニュー]>[変数を文字列に置換する]をクリックする
「置換したい文字列」シート上部の[GASメニュー]をクリックして[変数を文字列に置換する]をクリックします。
Google承認画面を進めていく
初めてこのGASを実行する場合、以下のような画面が表示されます。
[続行]をクリックして、画面の指示に従って、承認を進めてください。
Googleの承認画面の詳しい説明は以下のページで解説しています。
画像付きで解説しているので、参考にしてみてください。
承認が終わったら、再び[GASメニュー]>[変数を文字列に置換する]をクリックして、GASを実行します。
ドキュメント上の変数が置換される
GASの実行が終わると、ドキュメント上の変数が文字列に置換されます。
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でお困りの場合は、以下のページからご相談ください。
参考にしたページ
ご質問があれば、コメント欄からお問い合わせください。
コメント