2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ネクストエンジンAPIにEXCELブックから接続する

Posted at

##はじめに
 EC業界ではおなじみネクストエンジンのAPIに対して
MS Excelブックから接続、データ取得までを記載します。
アカウントの取得、アプリケーションの申請等下準備については割愛しますが、いずれドキュメント化したいと思います。
Excelブックという便利な記憶領域があるので、ネクストエンジンから取得したアクセストークン等はセルの中に入れておけば良いと思います。

以下にサンプルコードを示します。
必要な取得条件を設定し、ネクストエンジンAPIに接続、Json経由で必要な受注明細データを取得してExcelシートに貼り付けています。
※JsonのパースについてはJsonConverterをインポートして使用しています。(参考サイトを参照ください)

###サンプルコード

getmeisai.bas
'受注明細処理取得(ネクストエンジンAPI接続)
Private Sub getmeisai()
    Dim Token As String 'アクセストークン
    Dim Refresh As String 'リフレッシュトークン
    Dim jsonObj As Object 'パースしたjson用のオブジェクト
    Dim httpReq As New XMLHTTP60
    Dim i As Integer 'loopカウンタ
    Dim rngToken As Range
    Dim rngRefresh As Range
    Dim ws As Excel.Worksheet
    Dim ary() As Variant
    Dim cnt As Long 'レコード件数
    
    '取得する受注明細フィールド
    Const FIELDS As String = "&fields=receive_order_row_receive_order_id,receive_order_purchaser_name,receive_order_row_goods_id,receive_order_row_stock_allocation_quantity"
    
    '受注明細を取得するときの条件(受注分類タグ=[hoge] AND 受注状態区分=納品書印刷済み)
    Const WHERE As String = "&receive_order_cancel_type_id-eq=0&receive_order_gruoping_tag-neq=[hoge]&receive_order_row_goods_name-like=%hoge%&receive_order_order_status_id-eq=40"
    
    Set ws = Worksheets("hoge")
    Set rngToken = ws.Range("J2")
    Set rngRefresh = ws.Range("J3")
    
    '画面からアクセストークン・リフレッシュトークンをセットする
    Token = rngToken.Value
    Refresh = rngRefresh.Value
    
    With httpReq
        'リクエストURLとエンドポイント
        .Open "POST", "https://api.next-engine.org/api_v1_receiveorder_row/search"
        'ヘッダ
        .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        'パラメータを入れて送信
        .send ("&access_token=" & Token & "&refresh_token=" & Refresh & FIELDS & WHERE)
        
        'jsonをパースする
        Set jsonObj = JsonConverter.ParseJson(.responseText)
    End With
    Set httpReq = Nothing
    
    '取得したトークンをそれぞれ画面に戻す
    If jsonObj("result") = "success" Then
        rngToken.Value = jsonObj("access_token")
        rngRefresh.Value = jsonObj("refresh_token")
        rngToken.Offset(0, 1).Value = jsonObj("access_token_end_date")
        rngRefresh.Offset(0, 1).Value = jsonObj("refresh_token_end_date")
        Set rngToken = Nothing
        Set rngRefresh = Nothing
        
        ws.Range("A2:D1000").ClearContents
        '件数を取得
        cnt = jsonObj("count")
        '取得した検品対象データを配列に埋め込む
        ReDim Preserve ary(cnt - 1, 3)
        For i = 1 To cnt
            Application.StatusBar = "処理中" & i & "/" & jsonObj("count")
            ary(i - 1, 0) = CStr(jsonObj("data")(i)("receive_order_purchaser_name"))
            ary(i - 1, 1) = CLng(jsonObj("data")(i)("receive_order_row_receive_order_id"))
            ary(i - 1, 2) = CStr(jsonObj("data")(i)("receive_order_row_goods_id"))
            ary(i - 1, 3) = CInt(jsonObj("data")(i)("receive_order_row_stock_allocation_quantity"))
        Next i
        
        'シートにはめ込む
        ws.Range(ws.Cells(2, 1), ws.Cells(cnt + 1, 4)).Value = ary
        ThisWorkbook.Save
    Else
        Call MsgBox("受注情報を取得できませんでした ", vbExclamation, "エラー")
    End If
       
    Set jsonObj = Nothing
    Application.StatusBar = ""
End Sub

##参考サイト
エクセルVBAでHTTPリクエストをする最も簡単なプログラム
【VBA】JSONファイルの内容をEXCELファイルに読み込む
宇宙一わかりやすい?VBA-JSONを使ったJSONパースのしかた

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?