この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
はじめに
EXCELでマスタデータ等を作成して、直接サーバへリクエストしデータの格納/情報の取得をしたいと思いませんか?
それを実現する簡単な方法をご紹介します。
JSONデータを使用するために
BOXのAPIを使って見よう。(その3)でも紹介していますが、
EXCEL(VBA)でJSONを扱うには、VBA-JSONを使用するのが簡単です。
サンプル JSON
JSONデータ交換フォーマットの定義は、ECMA-404を参照して下さい。
{
"id" : 1,
"name" : "John Smith",
"friend_ids" : [ 10, 20, 30 ],
"shipTo" : { "name" : "Appirits Inc.",
"address" : "5F Kyocera-Harajuku Bldg. 6-27-8, Jingumae, Shibuya-ku",
"city" : "Tokyo",
"state" : "Japan",
"zip" : "150-0001" },
}
VBA で JSON 生成
連想配列 Dictionary と、可変配列 Collection を使って JSONオブジェクトにデータをセットする
'---------------------------------
' リクエストパラメタ生成
'---------------------------------
Dim JsonObject As Object
Set JsonObject = New Dictionary
JsonObject.Add "id", 1
JsonObject.Add "name", "John Smith"
JsonObject.Add "friend_ids", New Collection
JsonObject("friend_ids").Add 10
JsonObject("friend_ids").Add 20
JsonObject("friend_ids").Add 30
JsonObject.Add "shipTo", New Dictionary
JsonObject("shipTo").Add "name", "Appirits Inc."
JsonObject("shipTo").Add "address", "5F Kyocera-Harajuku Bldg. 6-27-8, Jingumae, Shibuya-ku"
JsonObject("shipTo").Add "city", "Tokyo"
JsonObject("shipTo").Add "state", "Japan"
JsonObject("shipTo").Add "zip", "150-0001"
' イミディエイトウィンドウで確認(デバック用)
Debug.Print JsonConverter.ConvertToJson(JsonObject, Whitespace:=2)
イミディエイトウィンドウで確認すると、JSONが生成されている事が確認できますね。
VBAからHTTP通信
CreateObject(“MSXML2.XMLHTTP”)でIXMLHTTPRequestオブジェクトをを生成して送信するのが簡単な方法です。
'---------------------------------
' リクエスト
'---------------------------------
Dim objHTTP As Object
Set objHTTP = CreateObject("msxml2.xmlhttp")
objHTTP.Open "POST", "http://localhost:8080", False
objHTTP.setRequestHeader "Content-Type", "text/plain"
objHTTP.send JsonConverter.ConvertToJson(JsonObject)
' レスポンスコード(正常)
If objHTTP.status = 200 Then
MsgBox "正常に終了しました"
End If
実際のHTTP通信内容を proxy ツールで確認
proxyツールfiddler を使った、HTTP通信内容を確認した様子です。
FiddlerでリクエストのPOSTデータが、JSONとなっていることを確認した結果です。
まとめ
送信するデータをEXCELから取得する部分は割愛しましたが、簡単にJSONデータが作成出来ましたね。
次回は、VBAで画像などのファイルをアップロードするにはどうすればいいか?
を考えて見ます。