Excel マクロ(VBA)で Redmine の情報を取得して、表にまとめる方法を考えてみました。
手っ取り早く試してみたい方
サンプルを置いておいたので、こちらをご利用ください。
http://hp.vector.co.jp/authors/VA049605/etc/redmine.xls
また、コードは GitHub Gist にも置いています。
https://gist.github.com/YujiSoftware/5429273
やっていること
Redmine から REST API という機能で情報を取得しています。
これ自体は、以下のような URL にアクセスするだけです。
'チケット #1234 の情報を取得する http://192.168.1.101/redmine/issues/1234.xml
これを、以下の記事を参考に MSXML2.DOMDocument で読み込んで、パースしています。
VBA XMLデータをDOMで扱う方法 - SMILEJAPAN プログラミングメモ
改造する場合
ほかにも、チケットに関する情報は取得できます。
どんな情報がとれるかは、以下の方法でわかります。
- REST API の URL (http://192.168.1.101/redmine/issues/1234.xml のようなアドレス) をブラウザで直接開いて中身を見る
- Redmine の Wiki を参照する
- Rest api - Redmine
- Redmine REST API - r-labs (上記の日本語情報、ただしちょっと古いです)
2013/04/23 追記:
もともと、JSONデータを取得して行うようにしていたのですが、これだと複雑になるうえ 64ビット版の Windows 上で動く Excel だとうまく動きませんでした。
そのため、XMLデータを取得するやり方に全面的に書き換えました。
以前のJSONデータを取得する方法は、下記(続きを読む)に残しておきます。
やること、その1 - Redmine の情報取得
まずは、Redmine から情報を取得します。
これ自体は、REST API という機能があるので、以下のような URL にアクセスするだけです。
'チケット #1234 の情報を取得する http://192.168.1.101/redmine/issues/1234.json
この処理は、以下を参考にさせていただきました。
やること、その2 - JSONデータを表に設定
続いて、JSONデータを表に設定していきます。
通常であれば、 data.issue.name というように、JavaScript でオブジェクトを扱うのと同じ要領でデータを取得できるんですが、ここでVB固有の問題が。
これだと、「name」とか「subject」といったプロパティにはアクセスできないんです…。*1
しょうがないので、CallByName 関数を使って、プロパティにアクセスします。
Dim data As Object Set data = GetJsonData(API + id + ".json") Cells(i, 2) = CallByName(data.issue.tracker, "name", VbGet)