プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
ExcelVBA、ExcelマクロからHTTPでPOSTする
Excelで管理している情報があるのですが
それをサーバ上のDBに放り込みたくてですね。
初回はExcelをアップロードして一気に放り込んだのですが
それ以降は差分だけ放り込みたかったのです。

データの変更量は1日1、2件くらいなので
Excel上から直接POSTしてサーバ側でDB突っ込めばい~か~ってのが
今回の経緯(--)b

と言う訳でExcelからPOSTするサンプルコードですφ(--)

  Private Sub CommandButton1_Click()
      '-----------------
      'リクエスト生成
      '-----------------
      'URL(必要に応じて変更)
      Dim url As String
      url = "http://example.com/hoge.php"
      
      'パラメータ(必要に応じて動的に生成)
      Dim paramStr As String
      paramStr = "&param1=パラメータ1&param2=ぱらめーた2&param3=param3"
      
      '--------------
      'POST実行
      '--------------
      Dim xmlhttp As Object
      Set xmlhttp = CreateObject("msxml2.xmlhttp")
      xmlhttp.Open "POST", url, False  '通り道を作って~
      xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
      xmlhttp.send (paramStr)    'パラメータをぽいっちょと
  
      '--------------
      '応答取得
      '--------------
      Dim retCd As String
      retCd = xmlhttp.Status    '結果コード取得
      
      If retCd <> 200 Then
          Debug.Print "error:" & retCd
      Else
          Dim retHtml As String
          retHtml = StrConv(xmlhttp.responsebody, vbUnicode, 1041)    '結果HTML取得
          Debug.Print retHtml
      End If
  End Sub

そんなに難しくはないと思いますが如何でしょ(--?

URLとパラメータを好きに作ったらPOSTして結果取得。

パラメータは「&key=value」を複数繋げることでいっぱい送れます。
サンプルではパラメータを固定文字列にしてありますが、
実際に作った奴ではExcel上から拾って動的に生成してます。

POST処理の部分は決まり文句みたいなもんですね。
エラー処理は入れてないけどそこら辺は適当にお願いします(--)ノ

完了\(--)/

あっ、そうそう。

ついでなので、やっつけで申し訳ないのですが
受け取り側のサンプルも置いておきますφ(--)

  <?php
  /**************************/
  // main
  /**************************/
  
      //-----------
      //定数宣言
      //-----------
      define("PARAM_START_NUM", 1); 
      define("PARAM_END_NUM", 3); 
  
      //-----------
      //主処理
      //-----------
      if (isset($_POST)){
          for($i = PARAM_START_NUM; $i <= PARAM_END_NUM; $i++){
              ${'param' . $i} = $_POST{'param' . $i};
          }
      }
  
      for($i = PARAM_START_NUM; $i <= PARAM_END_NUM; $i++){
          $str = mb_convert_encoding(${'param' . $i}, "SJIS-win", "UTF-8");
          print  "param" . $i . " : ". $str . "\n";
      }
  ?>

受け取ったパラメータ(param1~param3)を
表示(返却)するだけのPHPプログラムです。

注意点はExcel→PHPのパラメータはUTF-8で渡しているのに対し
PHP→ExcelはShift-JISで返してるところくらいですかね。
Shift-JISで返してるのは単純にDebug.Printで文字化けさせたくなかっただけなので
特に深い意味は無いです。
ご自分の用途に合わせて適当に決めたってください。

今度こそ完了\(--)/
 
このエントリーをはてなブックマークに追加 

category:ExcelVBA  thema:パソコンな日々 - genre:コンピュータ  Posted by ササキマコト 

  関連記事