ExcelからWebアプリにPOSTする
ExcelとWebアプリを連動させる。逆はともかく、アップロードする分にはVBAを使うのが簡単。
Sub ボタン1_Click() On Error GoTo err Dim httpObj Dim sendData ' データセット target_url = "http://xxxxxxxx.html" sendData = "class=" & Range("B1").Value sendData = sendData & "&year=" & Range("B2").Value sendData = sendData & "&month=" & Range("B3").Value sendData = sendData & "&result=" & Range("B4").Value ' POSTで飛ばします Set httpObj = CreateObject("Microsoft.XMLHTTP") httpObj.Open "POST", target_url, False Call httpObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") httpObj.send (sendData) ' 結果表示(デバッグ用) MsgBox httpObj.ResponseText Exit Sub err: MsgBox "エラー番号:" & err.Number & vbCrLf & _ "エラーの種類:" & err.Description, vbExclamation End Sub
データは、"キー"="値" の形で指定する。複数ある場合は&で連結し
"キー1"="値1" & "キー2"="値2" & "キー3"="値3" .....
とする。日本語の時はエンコードとか面倒だけど、英数字だけならそれほどでもない。
httpObj.ResponseTextには、Webアプリからの返事が入ってくる。
例えばHTMLの生データ等。
ちなみに送るデータsendDataはVariant型でないとイケナイらしい。
個人的には少し違和感。
受け取り側では、通常のPOSTと同様に
//実績の更新 $sql = "UPDATE `result` "; $sql .= "SET `result` = ? "; $sql .= ", `date` = ? "; $sql .= "WHERE `year` = " . htmlspecialchars($_POST['year']); $sql .= " AND `month` = " . htmlspecialchars($_POST['month']); $sql .= " AND `classid` = " . htmlspecialchars($_POST['class']); $stmt = $dbh->prepare($sql); $res = $stmt->execute(array(htmlspecialchars($_POST['result']), date('Y-m-d H:i:s')));
みたいな感じ。HTMLからでもExcelからでもどちらからでも投げられる。