2011/09/16

Google Apps Script ってすごいね

先日まで、Google Developer Day 2011 の DevQuiz がありました。

その中で Apps Script に関する問題が出題されていました。

個人的に気になっていたもので、ちょっとやってみることにしたのですが、ユーザガイドをみて驚きました。機能がすごく充実しています。

「オラ、わくわくすっぞ!」って感じです。


Google Apps Script ってなに?


Google Apps Script は、JavaScript を使用して Docs, Spreadsheets, Sites などから各種 Google サービスを制御することできます。
Microsoft Office における VBA のようなものです。

Apps Script では、作成した JavaScript のプログラムがサーバ上で実行される、という点が特徴ですね。


まだまだ日本語の情報が少ない Google Apps Script ですが、 Googleを追いかけろ! が参考になります。


Google Apps Script って何が出来るの?


何が出来るのかは、これから見ていきましょうw。

Excel を Apps Spreadsheets に移行する際の障壁は、VBA マクロだと思っていましたが、それが取り除かれた。と思ってもいいくらいなことができそうな予感です。


Google Apps Script を使ってみる


何はともあれ、どんなものかやってみましょう。


お題


よくある Excel マクロのように、CSV ファイルを読み込んで、Spreadsheets に出力してみます。


  1. スクリプトエディタ

    新規に作成した Spreadsheet から、ツールメニューの「スクリプトエディタ」でスクリプトエディタを起動します。

  2. コードを記述

    コード欄に下記を打ち込みます。

    function onOpen() {
      var app = UiApp.createApplication().setTitle("Upload CSV to Sheet");
      var form = app.createFormPanel().setId('frm').setEncoding('multipart/form-data');
      var formContent = app.createVerticalPanel();
      form.add(formContent);
      var file = app.createFileUpload().setName('thefile');
      var button = app.createSubmitButton('Submit');
    
      formContent.add(file);
      formContent.add(button);
    
      app.add(form);
    
      var doc = SpreadsheetApp.getActive();
      doc.show(app);
    }
    
    function doPost(e) {
      var app = UiApp.getActiveApplication();
      var fileBlob = e.parameter.thefile;
    
      var data = fileBlob.getDataAsString();
      if (!data) {
    	return app.close();
      }
      var csvData = data.split('\n');
    
      var sheet = SpreadsheetApp.getActiveSheet();
      sheet.getRange(sheet.getLastRow()+1, 1).setValue(fileBlob.getName());
    
      var startRow = sheet.getLastRow()+1;
      var startColumn = 1;
      for (var i=0,l=csvData.length;i<l;i++) {
    	var csvRow = csvData[i].split(',');
    	for (var j=0,l2=csvRow.length;j<l2;j++) {
    	  sheet.getRange(startRow+i, startColumn+j).setValue(csvRow[j]);
    	}
      }
    
      return app.close();
    }
    		
  3. Script の実行

    フロッピーアイコンでスクリプトを保存し、「関数を選択」より「onOpen」を選択します。

    再生ボタンでスクリプトを実行します。

  4. CSV をアップロード

    表示されたフォームより、適当な CSV ファイルを選択して、Submit です。

  5. CSV がシートに出力される

    CSV の内容がシートに書きだされました!


プログラムの説明を少しすると、[onOpen]という関数が、シートを開いたときに自動実行される関数です。VBA にもありますね。

ここで、アップロードフォームを作成し、表示させています。

もう一つの[doPost]という関数。これはフォームポスト時に呼び出されるもので、データの取得とシートへの書き出しを行っています。

doPost がポスト時に呼ばれるということに気付くまで結構はまりました…。


参考までに、アップロード時に使用した CSV と、Spreadsheet は下記から。参考にしてください。
*スクリプトの実行はできません


Google Apps Script をやってみて


リファレンスとにらめっこが必要ですが、汎用的な JavaScript で記述できるので非常にわかりやすいですね。

これから少しずつ、どんなことができるのか確認しながら、紹介してきたいと思います。

0 件のコメント: