GASでGoogleドキュメントのテキストを検索してBoldに置換する方法

テキストを検索してBoldに置換

Excelだと任意のテキストを検索してBoldなどに置換することは置換の書式を指定すれば簡単にできる。

しかし、Googleドキュメントだと書式の置換オプションが存在しないため、例えばfooという文字列をすべてBoldにしたい場合は1つずつ検索して手作業でBoldにしなければならない。

GASでテキストを検索してBoldに置換

さすがに一つずつ検索して手作業でBoldにするのは時間がかかりすぎるため、このような作業はGoogle Apps Script (以下GAS)を使用して任意のテキストを検索してBoldに置換できるようにしたほうが良い。

まず、以下のコードを記述してヘルプメニューの右に置換用のメニューを用意する。

function onOpen() {
  var ui = DocumentApp.getUi();
  ui.createMenu('置換')
    .addItem('太字', 'replaceBold')
    .addToUi();
}

次に置換用の関数を用意する。

やっていることはpromptで'Boldにする文字列を入力'を表示させて任意の文字列を入力させ、その文字列にマッチした箇所をsetBoldで太字にしているだけなので簡単である。
GASでGoogleドキュメントのテキストを検索してBoldに置換する方法

setBold部分をsetForegroundColorに変えれば文字色追加、setBackgroundColorで背景色変更になる。

function replaceBold() {
  var app = DocumentApp.getUi();
  var body = DocumentApp.getActiveDocument().getBody();
  var asText = body.asText();
  var text = asText.getText();
  var str = app.prompt(
    'Boldにする文字列を入力',
    app.ButtonSet.OK
  ).getResponseText();
  var match = new RegExp(text.match(str), 'gm');
  var pos = 0;
  var posN = 0;
  while ((arr = match.exec(text)) !== null) {
    Logger.log(arr);
    posN = body.asText().getText().indexOf(str, pos);
    if (posN !== -1) {
      asText.setBold(posN, posN + str.length - 1, true);
    }
    pos = match.lastIndex;
  }
}