Google Apps Scriptでドキュメントの見出しを自動化

Google Apps Script(GAS)を使うとGoogleドキュメントやスプレッドシートの操作を自動化することができます。今回は、ドキュメント内で目印を付けておいた見出し文にスタイルを一括で適用する方法について書きます。


GASで見出しを自動化

全体の流れとしては、まずローカルのテキストエディタで目印を付けながら構成を作成し、本文を書きます。次にそれをスクリプトが紐付けられたファイルにコピペし、ボタンをクリックして見出しスタイルを自動的に一括指定するというものです。


Google Apps Scriptとは

Google Apps ScriptはGoogleが提供する、サーバー上で動作するスクリプト環境です。Googleドキュメント、スプレッドシートGmailなどをJavaScriptで操作し、作業を自動化できます。

概要と基本的な使い方は以下のリンク先が参考になります。


スクリプトの作成

まず、Googleドキュメントで空白のドキュメントを新規作成し、以下のような文章を書きます。コピペで貼り付けるとき、Ctrl + Shift + v とすると余計なスタイルが入りません。

■が大見出し、□が中見出し、◇が小見出しの目印です。

はじめのてきすとです。はじめのてきすとです。

■大見出し1

てきすとです。てきすとです。

□中見出し1-1

てきすとです。てきすとです。

小見出し1-1-1

てきすとです。てきすとです。


次に、ファイルメニューの「ツール」→「スクリプトエディタ」でスクリプトエディタを起動し、以下のように書いて保存します。プロジェクト名などを聞かれたら自由に変えてください。

コードは上記サイトを参考に作成しました。感謝いたします。

// メニューにFunctionという名前のボタンを作成
function onOpen() {
  const ui = DocumentApp.getUi();
  ui.createMenu('Function')
      .addItem('見出しスタイルの適用', 'applyHeading')
      .addItem('見出し目印の削除', 'delMark')
      .addToUi();
}

//  見出しスタイルの適用
function applyHeading() {
  const body = DocumentApp.getActiveDocument().getBody();
  //  heading style
  const style1 = {};
  style1[DocumentApp.Attribute.FONT_SIZE] = 20;

  const style2 = {};
  style2[DocumentApp.Attribute.FONT_SIZE] = 16;

  const style3 = {};
  style3[DocumentApp.Attribute.FONT_SIZE] = 14;

  //  apply style
  var range_elem1 = body.findText('■');
  while (range_elem1) {
    range_elem1.getElement().setAttributes(style1);
    var range_elem1 = body.findText('■', range_elem1);
  }

  var range_elem2 = body.findText('□');
  while (range_elem2) {
    range_elem2.getElement().setAttributes(style2);
    var range_elem2 = body.findText('□', range_elem2);
  }

  var range_elem3 = body.findText('◇');
  while (range_elem3) {
    range_elem3.getElement().setAttributes(style3);
    var range_elem3 = body.findText('◇', range_elem3);
  }
}

//  見出し目印の削除
function delMark() {
  const body = DocumentApp.getActiveDocument().getBody();
  body.replaceText("■", "");
  body.replaceText("□", "");
  body.replaceText("◇", "");
}


スクリプトができたので実行します。まず、スクリプトエディタのメニューから「実行」→「関数を実行」→「onOpen」とします。初回は承認を求められるので、上記サイトなどを参考に承認します。


処理中のメッセージが消えたあとに、ドキュメントファイルを見ると、画像のようにメニューに「Function」が追加されているはずです。そしてFunctionをクリックすると「見出しスタイルの適用」と「見出し目印の削除」というサブメニューも確認できるはずです。

f:id:psycholococolo:20190525174158p:plain:w250


「見出しスタイルの適用」をクリックして実行すると、目印に合わせて見出しスタイルが一括で適用されます。問題なければ「見出し目印の削除」を実行し、目印を削除して完成です。


見出しに適用するスタイルをアレンジしたい場合は、BodyクラスのsetAttributesメソッドのサンプルが参考になります。今回のコードなら、applyHeading()関数のstyle1~3にFONT_FAMILYやBOLDを追加していけばOKです。また、styleを増やせば見出し4以上にも対応できます。デフォルトの見出しスタイルならsetHeadingAttributes()メソッドもあります。


まとめ

実際の手順では、スクリプトに紐付いたファイルはスクリプトを実行するためだけに使います。スクリプト付きのファイルをどこかに提出するというのはあまりよろしくない気がするためです。


したがって、テキストエディタで作った文章をスクリプト付ファイルにコピペし、それをもう一度新規ファイルにコピペという流れになります。コピペ作業が増えてますが、1個ずつ見出しスタイルを適用するよりかは若干楽になります。