2013年1月20日日曜日

Google Apps Scriptでのファイル入出力

何年か前まではSpread Sheet用のVBA程度しかなかったGoogle Apps Script。
この前ちょっと調べてたらGoogle Drive上にファイルを書き込んだり読み込んだりできるよになったました。

なのでAPIの調査がてらFile操作関連のサンプルコード書いてみました。
ソースはこちら。(github)

1. Plain Textファイルの読み込み

まずGoogle Drive上にあるファイルを読み込むスクリプト
function readPlainFileByName(){
  var files = DocsList.getFiles();
  for(var i = 0; i < files.length; i++){
    var fileName = files[i].getName();
    if(fileName == "sampleFile"){
      var contents = files[i].getContentAsString();
      Logger.log(contents);
    }
  }
}
sampleFileというファイル名のファイルを読み込んでいます。 

ファイル名をピンポイントで指定するメソッドはないようですが、ファイルの中身を全検索してヒットしたファイル一覧を取得するメソッドはあるようです。
function readPlainFileBySeach(){
  var files = DocsList.find('Hello World!');
  for(var i = 0; i < files.length; i++){

    /* Stringに変換できないFileTypeはgetContentAsStringでエラーになるため */
    if(files[i].getFileType() == DocsList.FileType.OTHER){
      var contents = files[i].getContentAsString();
      Logger.log(contents);
    }
  }
}

2. Plain Textファイルの書き込み

次にGoogle Drive上にファイルを作成して文字列を書き込むスクリプト
function writePlainFile(){
    outputFile = DocsList.createFile('sampleFile', ''); 
    outputFile.append('Hello World!');
}
sampleFileにHello Worldしています。

3. Google Doc形式(拡張子がgdoc)のファイルの読み込み

Google Doc形式のリッチテキストを操作するには専用のクラスが用意されている。
function readRichFile(){
  var doc = DocumentApp.openById('Google Docのid');
  var text = doc.getText();  
  Logger.log(text);

}

Google DocのIDはGoogle DriveからGoogle Docを開いた時のURLに表示されています
https://docs.google.com/document/d/[Google DocのID]/edit

4. Google Doc形式のファイルの書き込み


同様にリッチテキスト用のクラスを利用してファイル書き出し
function writeRichFile(){
  var doc = DocumentApp.create('sampleRichFile');
  doc.appendParagraph('Hello World!');
  doc.saveAndClose(); 
}

感想


Google Drive上のファイル操作ができるので、できることの幅は広がりそうですが、ファイル名がピンポイントで指定できなかったり、google doc形式のファイルを開くのにid指定だったりと使い勝手がいまいちなのが残念。

あとjavascriptということなので、plain text操作時に改行を出力するすべがないみたいです。試しに改行を含んだファイルを読み込んだところ、綺麗に除去されてjavascript上に渡って来ました。

改行使えないとさすがに見栄えが悪すぎて実用に耐えないので、このへんはFile.writeNewLine()とか専用のメソッドを用意して対応してほしいところですね。