我正在尝试编写VBA以将json发布到api并将结果解析为工作表。我可以生成JSON,并且我相信我可以将结果解析为我需要的内容。
我知道有一些在线工具可以将json转换为vba并返回浏览器并添加ins来发布请求,但我是办公室里唯一可以这样做的人,所以如果我生病或休假我想自动化它。要做到这一点,我需要发送json并可能存储响应,以便我可以解析它。
我是编码的新手,所以发布这样的请求是我的头脑。 到目前为止,我有以下代码来编写json。我很感激帮助我入门。如果需要,我可以发布json的样本或者我想发布的api。
对于糟糕的代码道歉我知道我可以改进它但是想要获得json响应,因为我认为它将是最具挑战性的部分。
编辑已经取得了一些进展。现在可以将JSON字符串发送到URL并获取响应。然而,它总是会失败:“{ “”message“”:“”发生错误。“” }“
如果我使用httpRequestor手动发送json,则会正确返回结果。 这似乎表明,代码中的某个地方JSON在发布时会以某种方式混淆或修改。
以下更新的代码。 (删除了对实际数据的任何引用)
编辑2修复并正常工作。 从
中删除了引号objHTTP.send(“Json”)
Private Sub CommandButton21_Click()
Dim h_1 As String
Dim h_2 As String
h_1 = Range("A1")
h_2 = Range("B1")
h_3 = Range("C1")
h_4 = Range("D1")
h_5 = Range("E1")
h_6 = Range("F1")
sv_1 = 2
sv_2 = 2
sv_3 = 2
sv_4 = 2
sv_5 = 2
sv_6 = 2
For f = 15 To 21
v_1 = Range("A" & sv_1)
v_2 = Range("B" & sv_2)
v_3 = Range("C" & sv_3)
v_4 = Range("D" & sv_4)
v_5 = Range("E" & sv_5)
v_6 = Range("F" & sv_6)
y = "[{""" & h_1 & """:""" & v_1 & """,""" & h_2 & """:""" & v_2 & """,""" & h_3 & """:""" & v_3 & """,""" & h_4 & """:""" & v_4 & """,""" & h_5 & """:""" & v_5 & """,""" & h_6 & """:""" & v_6 & """ }]"
Range("A" & f).Value = y
sv_1 = sv_1 + 1
sv_2 = sv_2 + 1
sv_3 = sv_3 + 1
sv_4 = sv_4 + 1
sv_5 = sv_5 + 1
sv_6 = sv_6 + 1
Next f
Dim objHTTP As Object
Dim Json As String
Json = Range("A15")
Dim result As String
'Set objIE = CreateObject("InternetExplorer.Application") ' Don't think this is needed
'objIE.navigate "about:blank" ' Don't think this is needed
'objIE.Visible = False ' Don't think this is needed
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
URl = "http://myApi/iSendJsonTo"
objHTTP.Open "POST", URl, False
'objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-type", "application/json"
objHTTP.send ("Json")
result = objHTTP.responseText
'objIE.document.Write result ' Don't think this is needed
'Some simple debugging
Range("A25").Value = result
Range("A26").Value = Json
Set objHTTP = Nothing
答案 0 :(得分:4)
以下是发送JSON的代码,清理了一点。
Dim objHTTP As Object
Dim Json As String
Json = Range("A15") 'here I am pulling in an existing json string to test it. String is created in other VBA code
Dim result As String
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
URl = "http://myApi/iSendJsonto/"
objHTTP.Open "POST", URl, False
objHTTP.setRequestHeader "Content-type", "application/json"
objHTTP.send (Json)
result = objHTTP.responseText
'Some simple debugging
Range("A25").Value = result
Range("A26").Value = Json
Set objHTTP = Nothing