Google Apps Script でファイルを保存してみる

どうも ASTRONEER を無線接続でやっているとたくさんあるバグが更に増え、我慢できず有線接続にした結果、家の端から端までLANケーブルをはわせることになった和田です。

最近、 Google Apps Script を触っています。

ご存じの方もいるかと思いますが「なんぞや」というのをざっくり説明しますと、 MSOffice に付属する VBA の、 Google Docs 版といった感じです。

MSOffice の VBA のように、定型化した作業や大量のデータを扱う場合などにとても便利に使えるすごいやつです。こんなのがウェブで使えるようになったなんてすごい時代だ。

今回はVBAから連想されるような大量の処理を行う方法ではなく、処理後のデータをCSVなどにして書き出す場合の処理を紹介したいと思います。書き出し先は Google Drive になります。以下、概要です。

  1. Google Apps Script を作成する
  2. スクリプトの名前を決めてコードを書く
  3. 保存先の Google Drive の ID を取得して、コードで使う
  4. 実行する
    1. 権限の認証をする
  5. 結果を確認する

Google Apps Script を作成する

まず、スクリプトファイルを作成します。

Google Apps Script には、 Google Docs などと紐付いている「Bound Script」と、今回作成する「Standalone Script」があります。

下図のように、「新規」→「その他」→「Google Apps Script」を選択して作成して下さい。最後の「Google Apps Script」がない場合、「アプリを追加」から有効化する必要があります。

img1

img-ex1

img-ex2

img-ex3

img-ex4

スクリプトファイルの種類について

Bound Script

「Bound Script」は、その名の通り Google Docs などと紐付いているスクリプトです(さっきも言った)。

「Standalone Script」との大きな違いは紐付いているファイルに対してのアクセスが容易な点です。「Standalone Script」に紐付けを行うためには、ファイルIDを調べて、設定して、認証して……といったように少々煩雑なのですが、その煩雑さが無いのが特徴です。

そのため、特定のファイルに依存した処理を行う場合はこちらのほうが向いているといえます。

Standalone Script

対しての「Standalone Script」ですが、「Bound Script」に比べ旨味がないように見えます。

しかし非常に大きな利点として、 Google Apps Script 標準の Script Editor で編集を行わなくて良くなるという点があります。概要ですが「Google Plugin for Eclipse」を使うと幸せになれます。ただ私の環境では保存時にファイルの同期をしてくれなかったため、 Google 力が足りていないのかもしれません。

ちなみに私は Script Editor からコードをコピーして、 IntelliJ IDEA で編集しています。 Bound/Standalone 関係ないですね。

スクリプトの名前を決めてコードを書く

以下のような画面になったら、適当な名前をつけてあげて下さい。例では「SampleProject」にしました。

img2

以下、今回使用するコードです。

function writeFile() {  
  var drive = DriveApp.getFolderById('=== FOLDER_ID ===');  // Google Drive のフォルダを指定する
  var fileName = 'sample.csv';                              // 保存ファイル名
  var contentType = 'text/csv';                             // コンテンツタイプ
  var charset = 'utf-8';                                    // 保存文字コード
  var delimiter = ',';                                      // 区切り文字
  var nl = '\n';                                            // 改行コード

  var data = [['value1', 'value2', 'value3'], [10, 20, 30], [100, 200, 300], [1000, 2000, 3000]]; // 保存するデータ
  var csvStr = '';

  // 文字列化する
  for(var i = 0; i < data.length; i++) {
    csvStr += data[i].join(delimiter) + nl;
  }

  // 新しい Blob を作成する
  var blob = Utilities.newBlob('', contentType, fileName).setDataFromString(csvStr, charset);
  // ファイル保存
  drive.createFile(blob);
}

保存先の Google Drive の ID を取得して、コードで使う

Google Drive フォルダIDを取得します。どこのことかというと、URLの部分です。下記画像の選択しているところがそれになります。

img3

ここで取得したフォルダにファイルが保存されます。

取得したら、ソースコード中の「=== FOLDER_ID ===」をフォルダIDで置き換えましょう。

img4

実行する

実行します。

実行には実行ボタンを押下するか、「実行」メニューから関数名を選択します。

初回時、以下の画面が表示されます。これは、「Google Driveにアクセスさせてもいいかい?」という確認ダイアログです。1度許可してしまえば2回目からは聞かれなくなります。

img5

img6

ここまで来たら、実行完了するまで少々待ちます。

結果を確認する

実行完了後、「フォルダID」で指定したフォルダを確認すると「sample.csv」というファイルが出力されていると思います。

img7

できたでしょうか?ここまで見てきて、意外と簡単だったと思います。 Google Apps Script を駆使すると、手作業をすることが減ると思いますので、積極的に活用していきましょう!