Google ドキュメントの拡張

Google Apps Script を使用すると、プログラムによって Google ドキュメントを作成、変更できます。また、新しいメニュー、ダイアログ ボックス、サイドバーなどを使用してユーザー インターフェースをカスタマイズできます。

基本情報

Apps Script では、主に 2 つの方法で Google ドキュメントを操作できます。1 つのスクリプトは、スクリプトのユーザーにドキュメントに対する適切な権限があれば、ドキュメントを作成または変更できます。スクリプトをドキュメントにバインドすることもできます。これにより、スクリプトは特別な機能を使用してユーザー インターフェースを変更したり、ドキュメントを開いたときに応答したりできます。Google ドキュメント内からコンテナにバインドされたスクリプトを作成するには、[拡張機能] > [Apps Script] をクリックします。

いずれの場合も、次の例に示すように、Apps Script のドキュメント サービスを介して Google ドキュメントを簡単に操作できます。

function createDoc() {
  var doc = DocumentApp.create('Sample Document');
  var body = doc.getBody();
  var rowsData = [['Plants', 'Animals'], ['Ficus', 'Goat'], ['Basil', 'Cat'], ['Moss', 'Frog']];
  body.insertParagraph(0, doc.getName())
      .setHeading(DocumentApp.ParagraphHeading.HEADING1);
  table = body.appendTable(rowsData);
  table.getRow(0).editAsText().setBold(true);
}

上記のスクリプトは、ユーザーの Google ドライブに新しいドキュメントを作成してから、ドキュメント名と同じテキストを含む段落を挿入し、その段落を見出しとしてスタイル設定し、2 次元配列の値に基づいて表を追加します。スクリプトでは、DocumentApp.create() の呼び出しを DocumentApp.openById() または openByUrl() に置き換えることで、既存のドキュメントに簡単に変更を加えることができます。ドキュメント内(コンテナバインド)で作成されたスクリプトの場合は、DocumentApp.getActiveDocument() を使用します。

ドキュメントの構造

Apps Script の観点からは、Google ドキュメントは HTML ドキュメントとよく似た構造になっています。つまり、Google ドキュメントは、他の要素を含むことが多い要素(ParagraphTable など)で構成されています。Google ドキュメントを変更するスクリプトのほとんどは、getBody() の呼び出しから開始します。これは、Body がマスター要素であり、HeaderSectionFooterSectionFootnotes を除くすべての要素を含むためです。

ただし、どのタイプの要素に他のタイプを含めることができるかについてはルールがあります。さらに、Apps Script のドキュメント サービスでは、特定のタイプの要素のみを挿入できます。以下のツリーは、特定のタイプの要素に含めることができる要素を示しています。

太字で示されている要素は挿入できます。太字でない要素は所定の位置でのみ操作できます。

テキストの置換

Apps Script は、Google ドキュメントでテキストの置き換えによく使用されます。たとえば、スプレッドシートにクライアント情報がすべて含まれており、クライアントごとにパーソナライズされた Google ドキュメントを生成するとします。(このような処理はメールへの差し込みと呼ばれます)。

テキストを置き換えるには多くの方法がありますが、最も簡単なのは、以下の例に示す replaceText() メソッドです。replaceText は、JavaScript の正規表現機能のほとんどをサポートしています。下記の最初の関数では、数行のプレースホルダ テキストを Google ドキュメントに追加します。実際のところ、プレースホルダはドキュメントに自分で入力する方が一般的です。2 番目の関数は、プレースホルダを client オブジェクトで定義されたプロパティに置き換えます。

どちらの関数でも getActiveDocument() メソッドが使用されます。このメソッドは Google ドキュメント内で作成されたスクリプトにのみ適用されます。スタンドアロンのスクリプトでは、代わりに DocumentApp.create()openById()、または openByUrl() を使用してください。

プレースホルダをいくつか追加する

function createPlaceholders() {
  var body = DocumentApp.getActiveDocument().getBody();
  body.appendParagraph('{name}');
  body.appendParagraph('{address}');
  body.appendParagraph('{city} {state} {zip}');
}

プレースホルダを置き換える

function searchAndReplace() {
  var body = DocumentApp.getActiveDocument()
      .getBody();
  var client = {
    name: 'Joe Script-Guru',
    address: '100 Script Rd',
    city: 'Scriptville',
    state: 'GA',
    zip: 94043
  };

  body.replaceText('{name}', client.name);
  body.replaceText('{address}', client.address);
  body.replaceText('{city}', client.city);
  body.replaceText('{state}', client.state);
  body.replaceText('{zip}', client.zip);
}

カスタム メニューとユーザー インターフェース

Google ドキュメントでは、メニュー、ダイアログ ボックス、サイドバーを追加してカスタマイズできます。ただし、スクリプトが UI を操作できるのは、開いているドキュメントの現在のインスタンスについて、かつスクリプトがドキュメントにバインドされている場合に限られます。

Google ドキュメントにカスタム メニューダイアログを追加する方法をご覧ください。ダイアログやサイドバーのカスタム インターフェースの作成について詳しくは、HTML サービスのガイドをご覧ください。カスタム インターフェースをアドオンの一部として公開する場合は、スタイルガイドに沿って、Google ドキュメント エディタのスタイルとレイアウトとの整合性を確保してください。

Google ドキュメント向けアドオン

アドオンは Google ドキュメント内で実行され、Google ドキュメントのアドオンストアからインストールできます。Google ドキュメント用に作成したスクリプトを広く共有する場合は、Apps Script でスクリプトをアドオンとしてpublishすると、他のユーザーがアドオンストアからインストールできるようになります。

Google ドキュメント用のアドオンを作成する方法については、ドキュメント アドオンを作成するためのクイックスタートをご覧ください。

トリガー

Google ドキュメントにバインドされたスクリプトは、シンプル トリガーを使用してドキュメントの onOpen イベントに応答できます。このイベントは、ドキュメントの編集権限を持つユーザーが Google ドキュメントで開くたびに発生します。

トリガーを設定するには、onOpen() という関数を記述します。このトリガーの例については、Google Workspace のカスタム メニューをご覧ください。シンプルトリガーはメニューの追加には便利ですが、認証を必要とする Apps Script サービスは使用できません。