Googleドキュメント簡易校正ツール:GASによる文章の一括置換/表記チェック

ツール

GAS(Google Apps Script)を使って、Googleドキュメントの文書の表記統一(一括置換)、および表記チェック(要チェック箇所の文字色を変えて表示)ができるスクリプトです。正規表現対応。編集者やライター、広報や社内文書の担当者、ブロガーなど向け。

紹介記事「Googleドキュメント用の簡易校正ツールを作ったよ」も参照してください。

※2011.11.14 更新 非正規表現のチェックに関するバグを修正したVer.0.5.1にコードを更新しました。すべてコピペして差し替えることで更新できます

機能と特徴

  • 一括置換していいものは文字列を機械的に置換、チェックが必要なものは文字列を赤文字にして目印とします
  • 一括置換および表記チェック用のテーブル(対象文字列の一覧)はGoogleスプレッドシートで管理でき、カスタマイズが容易です
  • 置換および表記チェックには正規表現が利用できます
  • 正規表現に詳しくない人向けに、表記チェックでは非正規表現も利用できます(エスケープなどの処理が不要)
  • 下のスクリーンショットのようにメニューバーからスクリプトを呼び出せるので、操作が簡単です

導入方法とコード

以下のコードをコピーして、Googleドキュメントのスクリプトエディタに貼り付けてください。詳しい方法はコードの下にて。

//簡易校正(一括置換・表記チェック)スクリプト
//Yuichiro Kobayashi 2021.11.14 Ver.0.5.1 
//heartlogic.jp@gmail.com

//メニュー追加
function onOpen() {
  const ui = DocumentApp.getUi()
  
  const menu = ui.createMenu("簡易校正");
  menu.addItem("一括置換","ReplaceWords");
  menu.addItem("表記チェック","CheckWords");
  
  //メニューに反映
  menu.addToUi();
}

//表記統一のための一括置換
function ReplaceWords(){
  //スプレッドシートから置換用配列「replaceTexts」を取得
  const ss = SpreadsheetApp.openById("17ZIeOqNMAN3oYscglEFyjMEtf8hES5uTjw6DgoxqpD4"); //IDを設定
  const sh = ss.getActiveSheet();
  const lastRow = sh.getLastRow();
  const replaceTexts = sh.getRange(1,1,lastRow,2).getValues();

  //アクティブなドキュメントの本文を変数「docBody」として取得
  const doc = DocumentApp.getActiveDocument()
  const docBody = doc.getBody();

  //本文を置換
  for (let i=0;i<lastRow;i++) {
    docBody.replaceText(replaceTexts[i][0],replaceTexts[i][1]);
  };

};

//表記チェック→赤字による警告
function CheckWords(){
  let num = 0;

  //スプレッドシートから置換用配列「checkTexts」を取得
  const ss = SpreadsheetApp.openById("1aFIH-dUKqXyNchpz8-Ac0JiekFvvdGVIKSSBFImYNa4"); //IDを設定
  const sh = ss.getActiveSheet();
  const lastRow = sh.getLastRow();
  const checkTexts = sh.getRange(1,1,lastRow,2).getValues();

  //アクティブなドキュメントの本文を変数「docBody」として取得
  const doc = DocumentApp.getActiveDocument()
  const docBody = doc.getBody();
  const docasText = docBody.asText();
  const docText = docBody.getText();

  //当該箇所を赤字にする処理
  for (let i=0;i<lastRow;i++) {
    if(checkTexts[i][1] !== 1){
      //非正規表現の場合
      const cWord = checkTexts[i][0];
      const cSplit = docText.split(cWord);
      let pos = 0;
      let posL = 0;
      let cLength = cWord.length -1;
      if(cLength == 0){
        cLength = 1;
      }

      for(let ii=0;ii<cSplit.length;ii++){
        posL = docBody.asText().getText().indexOf(cWord, pos);
        if(posL !== -1){
          docasText.setForegroundColor(posL,posL+cWord.length-1,'#ff0000');
        }
        pos = posL+cLength;
      }
    }else{
      //正規表現の場合
      const cWord = checkTexts[i][0];
      const cMatch = new RegExp(cWord, 'gm');

      let pos = 0;
      let posL = 0;
      while((arry = cMatch.exec(docText)) !== null){
        posL = docBody.asText().getText().indexOf(arry[0], pos);
        if(posL !== -1){
          docasText.setForegroundColor(posL,posL+arry[0].length-1,'#ff0000');
        }
        pos = cMatch.lastIndex;
      }
    }
  }
}

Googleドキュメントの編集画面で、メニューの[ツール]-[スクリプトエディタ]を選択すると、別のタブでスクリプトエディタが表示されます。


コピーしたコードを、上の画面のように貼り付けます。スクリプトエディタが表示された時点で「function myFunction() {~」と3行分のコードが入っていますが、それは削除したうえで貼り付けてください。現在公開しているコード(Ver.0.5.1)を貼り付けると、全部で88行になります。

貼り付けが完了したら、[保存]して[実行]します。初回実行時は許可を求められるので、画面の指示に従い許可してください。一般の(無料の)Googleアカウントの場合、[承認が必要です]というメッセージが表示されたら[権限を承認]をクリックし、続けてアカウントを選択後、怪しい画面が表示されたら[詳細]-[○○(安全ではないページ)に移動]をクリックしてください(以下の画面)。


次の画面で[許可]をクリックすると、実行が承認されます。Google Workspaceの場合は設定によって承認の操作が異なる可能性があります。

テーブルとカスタマイズ方法

ぞれぞれ閲覧専用で共有しています。自分のスプレッドシートにコピーし、内容を編集することで、独自の置換およびチェック用のスプレッドシートが作成できます。
自分で作ったスプレッドシートを利用する場合は、コード中の「SpreadsheetApp.openById(“○○○○”);」部分に入るIDを、自分が作ったスプレッドシートのものに置き換えてください。IDは、スプレッドシートを開いたときのURL「https://docs.google.com/spreadsheets/d/○○○○/」の「○○○○」にあたる部分です(半角英数字44文字)。

GAS簡易校正 置換用テーブル

ドキュメント中にあるA列の文字列を、B列の文字列に置き換えます。C列以降にはコメントなどを自由に記入可。

GAS簡易校正 チェック用テーブル

ドキュメント中にあるA列の文字列を、赤文字で表示して確認を促します。
正規表現を使用する場合はB列に「1」を入力しておきます。C列以降にはコメントなどを自由に記入可。

注意点など

複数のドキュメントで使いたい場合は、スクリプトがあるドキュメント自体をコピーするか、別のドキュメントにコードをコピペして使ってください。ドキュメントごとに初回起動時は許可の操作が必要です(面倒)。

バグ報告等はTwitterの@heartlogicまでお願いします(技術力不足でご期待どおりに対応できない可能性があります)。

バージョン履歴

・2021.11.14 バージョン0.5.1公開 非正規表現のチェックに関するバグを修正
・2021.11.13 バージョン0.5公開

既知の問題点

・現状だと、マッチングした文字列を置換後の文字列に持ってくることができない($1とかのパラメータのヤツ)

タイトルとURLをコピーしました