ホーム DoRuby EXCEL(VBA)から、JSONデータをHTTP送信してみよう。
EXCEL(VBA)から、JSONデータをHTTP送信してみよう。
 

EXCEL(VBA)から、JSONデータをHTTP送信してみよう。

この記事はアピリッツの技術ブログ「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が生成されている事が確認できますね。
イミディエイトウィンドウで表示した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でHTTP通信内容を確認

FiddlerでリクエストのPOSTデータが、JSONとなっていることを確認した結果です。
FiddlerでJSON内容確認

まとめ

送信するデータをEXCELから取得する部分は割愛しましたが、簡単にJSONデータが作成出来ましたね。
次回は、VBAで画像などのファイルをアップロードするにはどうすればいいか?
を考えて見ます。

記事を共有

最近人気な記事