Google ドキュメントを拡張

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

基本情報

Apps Script は、ドキュメントと 2 つの方法でやり取りできます。1 つは、スクリプトのユーザーがドキュメントに対する適切な権限を持っている場合、任意のスクリプトでドキュメントを作成または変更できる方法です。もう 1 つは、スクリプトをドキュメントにバインドする方法です。これにより、スクリプトでユーザー インターフェースを変更したり、ドキュメントを開いたときに応答したりできます。ドキュメント内からコンテナ バインド スクリプトを作成するには、[拡張機能]> [Apps Script] をクリックします。

どちらの場合でも、次の例に示すように、 Apps Script の Document Service を使用してドキュメントとやり取りできます。

function createDoc() {
  var doc = DocumentApp.create('Sample Document');
  var documentTab = doc.getTab('t.0').asDocumentTab();
  var body = documentTab.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 ドライブに新しいドキュメントを作成し、ID t.0 のタブ(デフォルトの最初のタブ)を取得して、ドキュメント名と同じテキストを含む段落を挿入し、その段落に見出しのスタイルを設定して、2 次元配列の値に基づいてテーブルを追加します。また、 スクリプトは、 DocumentApp.create の呼び出しを DocumentApp.openById または openByUrl に置き換えることで、既存のドキュメントに対してこれらの変更を行うこともできます。 ドキュメント内で作成されたスクリプト(コンテナ バインド)の場合は、 DocumentApp.getActiveDocumentDocument.getActiveTabを使用します。

ドキュメントの構造

Apps Script の観点から見ると、ドキュメントは HTML ドキュメントとよく似た構造になっています。つまり、ドキュメントは 1 つ以上の Tab オブジェクトで構成され、各オブジェクトには他の要素を含む要素(ParagraphTable など)が含まれています。ドキュメントを変更するほとんどのスクリプトは、 getTabasDocumentTab の呼び出しの後に getBody を呼び出します。 これは、BodyHeaderSectionFooterSection、 および Footnotes を除くタブ内の他のすべての要素を含むコア要素であるためです。

ただし、他のタイプの要素を含めることができる要素のタイプにはルールがあります。 また、Apps Script の Document Service では、特定のタイプの要素のみを他の要素に挿入できます。次のツリーは、特定のタイプの要素に含めることができる要素を示しています。

太字で示されている要素は挿入できます。太字以外の要素は、その場で操作することしかできません。

テキストを置き換える

Apps Script は、ドキュメント内のテキストを置き換えるためによく使用されます。 クライアント情報が記載されたスプレッドシートがあり、クライアントごとにパーソナライズされたドキュメントを生成するとします。(このような操作は、差し込み印刷と呼ばれることがよくあります)。

テキストを置き換えるには、replaceText メソッドを使用します。このメソッドは、ほとんどの JavaScript 正規表現 機能をサポートしています。次の例では、最初の関数でプレースホルダ テキストをドキュメントに追加し、2 番目の関数でそのテキストを client オブジェクトのプロパティに置き換えます。

これらの関数はどちらも getActiveDocumentgetActiveTab メソッドを使用します。これらは、ドキュメント内で作成されたスクリプトにのみ適用されます。スタンドアロン スクリプトでは、Document.getTab と組み合わせて DocumentApp.createopenById、 またはopenByUrl を使用します。

プレースホルダを追加する

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

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

function searchAndReplace() {
  var body = DocumentApp.getActiveDocument().getActiveTab().asDocumentTab().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);
}

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

カスタム メニュー 、ダイアログ ボックス、サイドバーを追加して、ドキュメントをカスタマイズできます。スクリプトは、バインドされているドキュメントの UI とのみやり取りできることに注意してください。

HTML と CSS を使用してカスタム インターフェースを作成する方法について詳しくは、 HTML Service のガイドをご覧ください。 インターフェースを アドオンとして公開する場合は、 スタイルガイドに沿って、外観が ドキュメント エディタと一貫したものになるようにしてください。

ドキュメント用アドオン

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

ドキュメント用アドオンを作成するには、ドキュメント用アドオンの作成の クイックスタート をご覧ください

トリガー

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

トリガーを設定するには、onOpen という名前の関数を作成します。このトリガーの例については、Google Workspace のカスタム メニューをご覧ください。トリガーはメニューの追加に便利ですが、承認が必要な Apps Script サービスは使用できません。