2011年4月11日月曜日

Google Apps ScriptでスプレッドシートからGoogleドキュメント以外のサービスにアクセスする

はじめに

Google Apps Scriptでは、GoogleドキュメントのみならずGoogleコンタクトやGoogleカレンダーなど多くのサービスにアクセスすることができます。それらをGoogleスプレッドシートから利用してみましょう。

スクリプトを関数として使う

Google Apps Scriptの基本操作と、スプレッドシートの基本的な扱いについて説明をしました。今回は、スクリプトの利用についてさらに深く考えてみましょう。まずは、「スクリプトを関数としてセルに設定する」ということからです。

Google Apps Scriptは、関数としてスクリプトを定義しますが、この関数は、Googleスプレッドシートに用意されている関数と同様にセルに設定し、自動的に計算させることが可能です。実際に簡単なサンプルを作ってみましょう。

function myFunc(n){
  var total = 0;
  for(var i = 1;i <= n;i++)
    total += i;
  return total;
}

 これは、セルでの利用を考えた関数です。ゼロから、引数に渡された値(整数)までの合計を計算してreturnするというごく単純なものです。例えばA1セルに「100」と記述し、A2セルに「=myFunc(A1)」というように関数を設定してみましょう。「5050」という数字が自動的に計算され表示されます。セルでの利用を考えた関数は、以下の2点を考えて設計する必要があります。

1.      他のセルの値などを利用して処理をする場合、引数にセルの指定を渡して処理をします。このとき、例えば「=myFunc(A1)」というようにA1セルが指定されると、myFunc関数の仮引数nにはA1セル(のRange)ではなく、A1セルの値が渡されます。

2.      計算結果は、returnで返します。この値が、関数を設定したセルに表示されます。

 セルの指定が引数で渡されると、スクリプトの仮引数にはセル自体ではなくその値が渡される、という点にさえ注意すれば、関数を作成するのはそれほど難しくはありません。ただし、ここでの例は、単純に「1つのセルが選択された場合」のみを想定していました。が、実際には多数のセルを範囲指定して処理をする場合もあります。

 こうした場合、スクリプトの仮引数には、指定されたセル範囲の値が2次元配列としてまとめられて渡されます。ですから、二重の繰り返しなどにより渡された配列の要素を処理するようにスクリプトを記述する必要があります。例をあげましょう。

function myFunc(arr){
  var total = 0;
  for(var i = 0;i < arr.length;i++)
    for (var j = 0;j < arr[i].length;j++)
      total += arr[i][j] * 1;
  return total;
}

 これは、選択されたセルの値すべてを合計する(つまり、SUM関数と同じ処理をする)サンプルです。二重の繰り返しを使い、仮引数のarrから順に値を取り出し処理しています。

 このように単独セルと、複数セルの場合で引数の扱いが多少変わります。両方のケースに対応させたい場合は、渡された値の内容を確認し、単独セルか複数セルかで処理を分岐するなどすればよいでしょう。

関数を設定する

 続いて、スクリプトによる関数の設定についてです。Googleスプレッドシートでは、各セルに関数を設定して自動計算させることが可能でした。セルを選択し、「挿入」メニューの「関数」から使用したい関数を選択することで、そのセルに関数の結果を表示させることができました。この「セルへの関数の設定」は、スクリプトから行うことも可能です。

 セルへの関数の設定は、Rangeオブジェクトの「setFormula」メソッドを呼び出して行います。これは、引数に関数のテキストを渡すことで、そのRangeのセルに関数を設定するものです。実際の利用例をあげましょう。

function setFunc(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange(1,1).setFormula("=TODAY()");
}

 これは、A1セルにTODAY関数を設定するものです。これを実行すると、A1セルに今日の日付が表示されるようになります。セルをダブルクリックして、TODAY関数が設定されていることを確認してみるとよいでしょう。

setValueでも関数設定可能?

Googleスプレッドシートの関数は、値と同じように設定をします。数値などを記入する代りに、「=関数名」と記述すると、自動的に関数として認識されるようになります。扱いが関数も普通の値と同様であるため、「なら、わざわざsetFormulaなど用意しなくとも、setValueで関数のテキストを設定すればいいのでは?」と思うかも知れません。

 ところが、これはうまくいきません。TODAY関数などのように単独で使うものはsetValueでも問題なく動くのですが、引数にセルの指定などを行う場合、setValueでは問題を起こすことがあります。例えば、このような場合です。

function setFunc(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange("A10").setValue("=SUM(A1:A9)");
}

 ここでは、A10セルに"=SUM(A1:A9)"と関数を設定しています。が、実際にやってみると分かりますが、セルには「#NAME?」とエラーが表示されてしまいます。念のためにセルをダブルクリックして設定されている値をチェックすると、「=SUM(A1:A9)」と正しく設定されています。それでもなぜか関数が機能しないのです。

function setFunc(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange("A10").setFormula("=SUM(A1:A9)");
}

 このように実行すると、今度は問題なく動きます。設定される値はどちらもまったく同じなのですが、setValueでは動かず、setFormulaではきちんと動くのです。どうやら、関数の引数にセルの指定を行う際、単に"A1:A9"といったテキストだけでなく、内部的に何か別の処理をしているのかも知れません。setValueではそうしたことが行われないため、関数設定についてはsetFormulaを使うようにされている、ということなのでしょう。

選択範囲に応じた関数の設定

 このように、setFormula("=SUM(A1:A9)")といった形でテキストとして関数を設定するのは非常に簡単に行えます。が、引数にセルの範囲を指定して使う場合、そのセル範囲をダイナミックに指定する場合もあるでしょう。このような場合には、どのようにしてセル範囲を取得し指定するかを考える必要があります。

 例として、「選択されたセル範囲の合計を、その下にあるセルに表示する」という場合を考えてみましょう。マウスでセルを選択してスクリプトを実行すると、その各列の合計を、選択されセル範囲のすぐ下のセルにSUM関数を使って表示します。つまり、現在選択されているセル範囲を基に、関数を設定するセルと、そこに用意するSUM関数の引数(どのセル範囲を合計するか)をダイナミックに取得し設定するわけです。

function setSUM(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = sheet.getActiveRange();
  var r = range.getRowIndex();
  var rw = range.getHeight();
  var c = range.getColumnIndex();
  var cw = range.getWidth();
  var nextrange = sheet.getRange(r + rw,c,1,cw);
  for(var i = 0;i < cw;i++){
    var rowrange = sheet.getRange(r,c + i,rw,1);
    var A1str = rowrange.getA1Notation();
    var cell = nextrange.getCell(1, i + 1)
    cell.setFormula("=SUM(" + A1str + ")");
  }
}

 選択されたセル範囲は、getActiveRangeで得られます。そのセル範囲は、以下の関数を使うことで調べることができます。

セル範囲を調べる関数

関数名

概要

getRowIndex

Rangeの一番最初の行番号を返します。

getColumnIndex

Rangeの一番最初の列番号を返します。

getLastRow

Rangeの一番最後の行番号を返します。

getLastColumn

Rangeの一番最後の列番号を返します。

getHeight

Rangeの行数を返します。

getWidth

Rangeの列数を返します。

 また、行・列の番号をもとにしてRangeを取得する場合、getRangeの引数にそれらを指定してやります。例えば次のような具合です。

Sheet.getRange( 行番号 , 列番号 )
Sheet.getRange( 行番号 , 列番号 , 行数 , 列数 )

 これらのメソッドを利用することで、選択された範囲を調べたり、それに隣接するセルの行列番号を取得したりできるようになります。では、SUM関数の引数に指定するセル範囲の表記はどのようにして取得するのでしょうか。SUMなどの関数では、行列番号ではなく、"A1:A10"といった形式でセルを指定します。

 この表記を調べるには、Rangeオブジェクトの「getA1Notation」というメソッドを利用します。これは、そのRange"A1"形式の表記テキストを返すメソッドです。これで取得したテキストをSUM関数の引数に渡し、setFormulaすればいいわけです。

ユーザー情報の取得

Google Apps Scriptは、Googleスプレッドシートだけで利用可能なものではありません。その他のサービスと連携した処理もいろいろと用意されています。それらについても紹介しましょう。まずは、ユーザー情報についてです。

function showUserData(){
  var user = Session.getUser();
  var mail = user.getEmail();
  var id = user.getUserLoginId();
  Browser.msgBox(mail + "\n" + id);
}

 これは、ログインしているユーザーのIDとメールアドレス(通常、両者は同じになります)を表示するサンプルです。アクセスしているユーザーに関する情報は、「User」オブジェクトとして用意されています。これは、セッションを管理する「Session」オブジェクトから取得できます。「Session.getUser()」を呼び出すことで、現在ログインしているユーザーのUserオブジェクトが得られます。

 このUserオブジェクトには「getEmail」「getUserLoginId」といったメソッドが用意されています。これらにより、ユーザーのメールアドレスやログインIDが取得できます。ログインしているユーザーのチェックなどに利用できます。

Gmailの送信

Userのメソッドの具体的な利用法はいくつかありますが、最も簡単に利用できるのは「メールの送信」でしょう。Google Apps Scriptでは、Gmailを利用したメールの送信をサポートしています。実際に、簡単な送信例をあげましょう。

function sendmail(){
  var res = Browser.inputBox("メッセージを入力:");
  if (res != ""){
    var user = Session.getUser();
    var mail = user.getEmail();
    MailApp.sendEmail(mail, "テスト送信", res);
    Browser.msgBox("送信しました。");
  }
}

 これは、ログインしているユーザーのメールアドレスにメールを送るサンプルです。UserオブジェクトのgetEmailで取得したメールアドレスにメールを送信しています。なお、初めてこのスクリプトを実行するとき、スクリプトが外部のサービスにアクセスすることを許可するための認証画面が現れます。ここでアクセスを許可してください。拒否するとスクリプトは正常に動きません。

 メールの送信は、「MailApp」オブジェクトの「sendEmail」メソッドで行います。これは次のような形で呼び出します。

MailApp.sendEmail( 送信アドレス , タイトル , 本文 );

 非常にシンプルです。たったこれだけで、指定のアドレスにメールを送ることができます。考えてみると、Google Appsが利用可能ということは、既にGoogleアカウントでログインしているわけですから、ログインしなければ利用できないサービス類との連携も自由にできることになります。

メールにファイルを添付する

 このsendEmailでは、第4引数としてオプション設定の情報を追加することができます。これにより、送信メールにさまざまな設定を追加することができます。この第4引数は、次のような項目をキーに持つ連想配列として値を用意します。

sendEmailの第4引数

キー

概要

bcc

BCCで送信するアドレスをテキストで指定します。

cc

CCで送信するアドレスをテキストで指定します。

htmlBody

HTMLメールを作成する場合のHTMLボディをテキストで指定します。

name

送信者の名前を指定します。

noReply

no-replyの設定を真偽値で指定します。

replyTo

返信先アドレスをテキストで指定します。

attachments

ファイルを添付する場合、その情報を配列で指定します。

 これらの中で、やや分かりにくいのが、attachmentsによるファイル添付でしょう。これは、添付するファイルの情報を連想配列にまとめたものを、添付するファイルの数だけ配列としてまとめます。つまり、次のような構造で値を用意するわけです。

attachments:[
    {fileName: ファイル名 , mimeType: 送信データの種類 , content: ファイルの内容 },
    ……必要なだけ連想配列を用意……
]

 これで、ファイルを添付して送信することが可能になります。では、先ほどのサンプルを修正して、選択したセルの内容をテキストファイルとして添付して送信するようにしてみましょう。

function sendmail(){
  var res = Browser.inputBox("メッセージを入力:");
  if (res != "" & res != "cancel"){
    var user = Session.getUser();
    var mail = user.getEmail();
    var data = "";
    var values= SpreadsheetApp.getActiveRange().getValues();
    for(var i = 0;i < values.length;i++){
      for(var j = 0;j < values[i].length;j++){
        data += values[i][j] + "\t";
      }
      data += "\n";
    }
    var attach = {fileName:"data.txt",mimeType:"text/plain",content:data};
    var options = {attachments:[attach]};
    MailApp.sendEmail(mail, "テスト送信", res, options);
    Browser.msgBox("送信しました。");
  }
}

 ここでは、getActiveRangegetValuesで得られた値をタブと改行で一つのテキストにまとめ、それをdata.txtというファイルで添付して送信しています。このように、Google Apps Scriptを使えば、スプレッドシートのデータなどを整理し必要な相手にメールで送信するスクリプトが簡単に作成できるのです。

Webページのフェッチ

 メールの送信は、スプレッドシートの内容を外部へ送信するのに役立ちますが、反対に「外部のデータをスプレッドシートに取り込む」ということはできないのでしょうか。

 もし、取得したいデータがWeb上に公開されているのであれば、そのアドレスからデータを取得し、処理することが可能です。「UrlFetchApp」というオブジェクトを利用することで、特定のURLからデータを取得することができるのです。通常、JavaScriptでは、スクリプトが設置されたサイト外へのアクセスは制限されていますが、Google Apps Scriptではこの部分をサーバー側で処理することで、サイト外のデータを得ることができます。これは次のように行います。

UrlFetchApp.fetch( アドレス )

UrlFetchAppに用意されている「fetch」メソッドで、引数にアクセス先のアドレスを指定して呼び出すことで、そのサイトからのデータを取得できます。では簡単な利用例として、WebURLを入力すると、そのページにアクセスし、ソースコードに含まれているURLHTTP/HTTPSのみ)をシートにすべて書き出す、というスクリプトを考えてみましょう。

function getUrlData(){
  var input = Browser.inputBox("URLを入力:");
  if (input != "" & input != "cancel"){
    var data = UrlFetchApp.fetch(input);
    var content= data.getContentText();
    var arr = content.match(/(http|https):\/\/[\w.\/-?=&]+/g);
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    var range = sheet.getRange(1,1,arr.length,1);
    for(var i = 0;i < arr.length;i++)
      range.getCell(i + 1, 1).setValue(arr[i]);
    Browser.msgBox("URLを出力しました。");
  }
}

Browser.inputBoxURLを入力してもらい、それを引数に指定してUrlFetchApp.fetchを呼び出しています。このfetchで取得されるのは、「HTTPResponse」というオブジェクトです。これはアクセスして得られるHTTPレスポンスを管理するオブジェクトです。得られたHTTPResponseからデータを取得するには、以下の2つのメソッドが用意されています。

HTTPResponse.getContent()
HTTPResponse.getContentText()

getContentは、バイナリデータを各バイトごとに配列にまとめたものが返されます。getContentTextは、テキストとして値を返します。ここではgetContentTextでテキストとして取得し、それを正規表現でURLのテキスト部分だけを取り出しています。後は、SheetgetRangeで必要な数だけセルを取得し、パターンマッチしたテキストを順に書き出すだけです。

 このように、UrlFetchApp.fetchとシートの操作を組み合わせることで、外部のWebサイトから情報を収集しシートに整理するようなスクリプトが作成可能になります。スプレッドシートを、単に「ユーザーが自分でデータを書いて計算するもの」だけでなく、さまざまなデータを収集し整理するためのツールとして活用できるようになります。

Googleコンタクトの利用

GoogleGmailなどでは、よく利用するメールアドレスなどの情報を「連絡先」として管理しています。これは「Googleコンタクト」というGoogleのサービスを利用しています。Googleコンタクトは、単にメールアドレスだけでなく、利用者の名前や住所、電話番号、誕生日などさまざまな個人情報を管理することができます。

 このGoogleコンタクトの情報もGoogle Apps Scriptから利用することができます。ログインしているユーザーのGoogleコンタクトにアクセスするための「ContactsApp」というオブジェクトが用意されており、そこから必要な情報を取り出していきます。例えば、Googleコンタクトに保管されているグループやユーザーの情報を取得する場合、次のようなメソッドを利用します。

グループの取得

ContactsApp.getContactGroups()

 全グループを配列として取得します。各グループの情報は、「ContactGroup」というオブジェクトとしてまとめられています。ここから、グループ名や、グループに保管されているユーザー情報などを得られます。

ユーザーの取得

ContactsApp.getAllContacts()
ContactGroup.getContacts()

 全ユーザーの情報を取得するには、ContactsAppの「getAllContacts」を使います。またグループに含まれているユーザーは、ContactGroupの「getContacts」を使います。いずれも、ユーザー情報を管理する「Contact」オブジェクトの配列が返されます。

 これらのメソッドにより、ログインユーザーのGoogleコンタクトの情報を自由に取得できます。

 では実際に簡単な例をあげましょう。Googleコンタクトからグループとそれに含まれるユーザーの情報を取得し、シートに書きだします。初めてアクセスする際、Googleコンタクトへのアクセスを許可するための認証画面がスクリプトエディタに表示されますので、ここでアクセスを許可してください。これを拒否するとデータの取得は行えません。

function getContactsData(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var groups = ContactsApp.getContactGroups();
  for(var i = 0;i < groups.length;i++){
    var group = groups[i];
    var contacts = group.getContacts();
    var range = sheet.getRange(1,i + 1,contacts.length + 1,1);
    range.getCell(1,1).setValue(group.getGroupName());
    for(var j = 0;j < contacts.length;j++){
      var contact = contacts[j];
      range.getCell(j + 2,1).setValue(contact.getFullName() + "\n" + contact.getPrimaryEmail());
    }
  }
}

 ここでは、各ユーザーの名前(フルネーム)とメインのメールアドレスだけを取得し表示してますが、それ以外の情報も同様に取り出すことは可能です。ContactsApp.getContactGroupsContactGroupの配列を取得し、繰り返しを使ってその各グループからgetContactsContact配列を取得します。ここでは、「getFullName」「getPrimaryEmail」というメソッドで、各Contactのフルネームとデフォルトメールアドレスを取り出してセルに書き出しています。Contactに用意されている、各種の情報を取得するためのメソッドは次のようなものがあります。

Contactのメソッド

メソッド名

概要

getFullName

名前(フルネーム)を返します。

getPrimaryEmail

デフォルトのメールアドレスを返します。

getEmailAddresses

登録されているすべてのメールアドレスを配列で返します。

getHomeAddress

自宅用メールアドレスを返します。

getWorkAddress

仕事用メールアドレスを返します。

getPager

ページャー(ポケベル)番号を返します。

getHomeFax

自宅用FAX番号を返します。

getWorkFax

仕事用FAX番号を返します。

getHomePhone

自宅用電話番号を返します。

getWorkPhone

仕事用電話番号を返します。

getMobilePhone

携帯電話番号を返します。

getNotes

ノート(メモ)を返します。

 これらは、すべての項目に必ずしも値が用意されているわけではないので注意が必要です。実際に、それぞれのGmailで連絡先に登録されているデータを確認してみると分かることですが、大抵は名前とメールアドレス程度しかデータは記録されていないでしょう。

Contactデータを作成する

 続いて、Googleコンタクトにデータを作成してみましょう。Google Apps Scriptからは、グループ(ContactGroup)とコンタクト(Contact)のデータをスクリプトで作成することが可能です。これは次のようなメソッドとして用意されています。

ContactGroupの作成

ContactsApp.createContactGroup( グループ名 )

Contactの作成

ContactsApp.createContact( ファーストネーム, ラストネーム, メールアドレス )

ContactGroupの作成は非常に単純です。単に、作成するグループ名を引数に指定するだけです。Contactの作成は、ファーストネームとラストネーム、メールアドレスをそれぞれ引数に指定して作成します。それ以外の情報は、Contactを作成後、メソッドを呼び出して設定していくことになるでしょう。

 では、実際の利用例をあげておきましょう。スクリプトを実行すると、シートに記述された情報を取得しGoogleコンタクトに登録する、というものです。あらかじめ、シートにファーストネーム、ラストネーム、メールアドレスをそれぞれAC列に1行目から順に記述しておいてください。

function makeContact(){
  var gname = Browser.inputBox("グループ名を入力:");
  if (gname != "" & gname != "cancel"){
    var sheet= SpreadsheetApp.getActiveSheet();
    var group = ContactsApp.createContactGroup(gname);
    var i = 1;
    while(true){
      var fname = sheet.getRange(i, 1).getValue();
      var sname = sheet.getRange(i, 2).getValue();
      var add = sheet.getRange(i, 3).getValue();
      if (add == "") break;
      var contact = ContactsApp.createContact(fname, sname, add);
      group.addContact(contact);
      i++;
    }
    Browser.msgBox("コンタクトデータの登録を完了しました。");
  }
}

 ここではSpreadsheetApp.getActiveSheetから各セルの値をgetRangeで取得していき、それを基にしてContactsApp.createContactを実行しています。作成したContactは、ContactGroupの「addContact」を使って、そのグループに組み込むことができます。

Googleカレンダーを利用する

Google Appsで多用されるサービスと言えば、Gmailと並んで「Googleカレンダー」の名が上がることでしょう。各種のスケジュールを管理するツールとしてGoogleカレンダーは重要な役割を果たしています。このカレンダー情報も、Google Apps Scriptから利用することが可能です。

Googleカレンダーの情報能は、いくつかのオブジェクトの組み合わせとして管理されています。全体を管理する「CalendarApp」からカレンダーのオブジェクトを取得し、さらに各イベントのオブジェクトを取得するという形になります。基本的なメソッドを以下に整理しておきましょう。

カレンダーの取得

CalendarApp.getDefaultCalendar()
CalendarApp.openByName( カレンダー名 )
CalendarApp.openByEmailAddress( メールアドレス )

 カレンダー関係の機能は、「CalendarApp」というオブジェクトとして用意されています。これはGoogleカレンダーのサービス全般に関する機能を提供するものです。このオブジェクトから、個々のカレンダーを管理する「Calendar」オブジェクトを取得します。

Calendarを取得するためのメソッドは3種類用意されています。「getDefaultCalendar」は、デフォルトで設定されているカレンダーを取得するものです。「openByName」は、カレンダー名を指定して取得します。「openByEmailAddress」は、メールアドレスを指定し、そのメールアドレスのカレンダーを取得します。これは、他の人のカレンダーを共有している場合に用いるものです。

イベントの取得

Calendar.getEvents(Date,Date)

Calendarの中から、それぞれのイベントを管理する「CalendarEvent」オブジェクトを取得します。「getEvents」は、引数にDate2つ指定して呼び出すことで、その範囲内にある全イベントをCalendarEventの配列として返します。

 では、これらを利用した簡単な例をあげておきましょう。カレンダー名を入力すると、そのカレンダーから2010年の予定をすべて取得し、シートに書きだします。これも、最初に実行する際、Googleカレンダーへのアクセスを許可するための認証画面が表示されますので、アクセスを許可してください。

function getCalData(){
  var cname = Browser.inputBox("カレンダー名を入力:");
  if (cname != "" & cname != "cancel"){
    var cal = CalendarApp.openByName(cname);
    var arr = cal.getEvents(new Date(2010,1,1),new Date(2010,12,31));
    var num = arr.length;
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    var range = sheet.getRange(1,1,num,2);
    for(var i = 0;i < num;i++){
      range.getCell(i + 1,1).setValue(arr[i].getTitle());
      range.getCell(i + 1,2).setValue(arr[i].getStartTime());
    }
    Browser.msgBox("予定を表示しました。");
  }
}

CalendarApp.openByNameCalendarを取得し、そこからgetEventsで全CalendarEventを取得します。後は、繰り返しを使ってイベントの情報を取り出してはセルに書き出していくだけです。ここでは、CalendarEventの「getTitle」「getStartTime」というメソッドで、イベントのタイトルと開始日時を取り出し表示しています。CalendarEventオブジェクトには、イベントに用意されている情報を取得するのに次のようなメソッドが用意されています。これらを呼び出すことで、イベントに関する各種の情報を得ることができます。

CalendarEventのメソッド

メソッド名

概要

getTitle

タイトルを返します。

getDescription

説明のテキストを返します。

getSummary

サマリーを返します。

getStartTime

イベントの開始日時をDateオブジェクトで返します。

getEndTime

イベントの終了日時をDateオブジェクトで返します。

getGuests

イベントに登録されているゲストのメールアドレスを配列で返します。

getGuestsStatus

イベントのゲストに関するステータスを、EventGuestというオブジェクトの配列として返します。

カレンダーにイベントを追加する

Google Apps Scriptでは、カレンダーにイベントを新たに作成することも可能です。CalendarAppからCalendarオブジェクトを取得し、新たにイベントを作成する「createEvent」メソッドを呼び出すことでそのカレンダーにイベントを登録することができます。実際にやってみましょう。

function makeCalEvent(){
  var cname = Browser.inputBox("イベントを入力:");
  if (cname != "" & cname != "cancel"){
    var cal = CalendarApp.getDefaultCalendar();
    var d1 = new Date();
    var d2 = new Date();
    d1.setHours(9);
    d2.setHours(17);
    d1.setMinutes(0);
    d2.setMinutes(0);
    d1.setSeconds(0);
    d2.setSeconds(0);
    cal.createEvent(cname, d1, d2);
    Browser.msgBox("新しいイベントを追加しました。");
  }
}

 これは、デフォルトのカレンダーにイベントを追加するサンプルです。イベントのタイトルを入力すると、その日の9:0017:00のイベントとして登録をします。ここではCalendarApp.getDefaultCalendarCalendarオブジェクトを取得した後、2つのDateオブジェクトを用意してcreateEventを呼び出しています。このcreateEventは、

Calendar.createEvent( タイトル ,Date,Date);

 このような形で呼び出します。引数に、イベントのタイトルと、イベントの開始日時・終了日時を示すDateオブジェクトを渡す必要があります。なお、ここではデフォルトのカレンダーに追加しましたが、openByNameなどでCalendarを取得することで、その他の任意のカレンダーにイベントを追加することももちろん可能です。

まとめ

 以上、今回は作成したスクリプトの使いこなしから、その他のGoogle関連サービスとの連携などについて一通りの機能をまとめて解説しました。Google Apps Scriptが、単なる表計算ソフトのマクロといったものにとどまらぬものであることを少しは感じられたのではないでしょうか。

Googleは、Google Apps ScriptによってあらゆるWebアプリケーションをスクリプトで統合することをどうやら本気で考えているようです。それがどこまで可能か、現時点では分かりません。が、少なくともGoogleカレンダーやGoogleコンタクトなどとの連携を実際に利用してみると、これは大きな可能性を秘めていることが分かるでしょう。

Google Apps Scriptを使い、Googleスプレッドシートにあらゆる情報を取り込んで整理していく。これは実際にやってみると、かなり面白いものです。まだまだ荒削りなところはありますが、ぜひ一度、使ってみてくだ

 

0 件のコメント:

コメントを投稿