Google ドキュメントを拡張する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

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

基本情報

Apps Script では、大きく次の 2 つの方法で Google ドキュメントとやり取りできます。スクリプトにユーザーが適切な権限を持っていれば、どのドキュメントでも作成または変更できます。また、スクリプトをドキュメントにバインドして、ドキュメントを開いたときにユーザー インターフェースを変更したり応答したりできます。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 が、HeaderSectionFooterSection、および Footnotes 以外のすべての要素を含むマスター要素であるためです。

ただし、他のタイプを含めることができる要素のタイプについては、ルールがあります。さらに、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 でスクリプトをアドオンとして公開し、他のユーザーがアドオンストアからそのスクリプトをインストールできるようにします。

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

トリガー

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

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