JSON导入到Excel [英] JSON import to Excel
问题描述
是否可以在宏中编写JSON调用?
Is it possible to script JSON calls in a macro?
我想通过API连接获取JSON字符串。看来Excel的问题是希望在HTML字符串中传递参数,但JSON会传递HTML体中的参数。任何想法?
I want to get a JSON string through an API connection. It looks like the problem is Excel expects the parameters to be passed in the HTML-string, but JSON passes parameters in the HTML body. Any ideas?
推荐答案
由于这是VBA,我将使用COM调用 xmlhttprequest
但是以同步方式使用它,不会影响VBA的单线程执行环境。一个示例类说明了一个 post
和 get
请求以下方式:
Since this is VBA, I'd use COM to call xmlhttprequest
but use it in synchronous manner as not to upset VBA’s single threaded execution environment, A sample class that illustrates a post
and get
request in this manner follows:
'BEGIN CLASS syncWebRequest
Private Const REQUEST_COMPLETE = 4
Private m_xmlhttp As Object
Private m_response As String
Private Sub Class_Initialize()
Set m_xmlhttp = CreateObject("Microsoft.XMLHTTP")
End Sub
Private Sub Class_Terminate()
Set m_xmlhttp = Nothing
End Sub
Property Get Response() As String
Response = m_response
End Property
Property Get Status() As Long
Status = m_xmlhttp.Status
End Property
Public Sub AjaxPost(Url As String, Optional postData As String = "")
m_xmlhttp.Open "POST", Url, False
m_xmlhttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
m_xmlhttp.setRequestHeader "Content-length", Len(postData)
m_xmlhttp.setRequestHeader "Connection", "close"
m_xmlhttp.send (postData)
If m_xmlhttp.readyState = REQUEST_COMPLETE Then
m_response = m_xmlhttp.responseText
End If
End Sub
Public Sub AjaxGet(Url As String)
m_xmlhttp.Open "GET", Url, False
m_xmlhttp.setRequestHeader "Connection", "close"
m_xmlhttp.send
If m_xmlhttp.readyState = REQUEST_COMPLETE Then
m_response = m_xmlhttp.responseText
End If
End Sub
'END CLASS syncWebRequest
所以现在你可以调用上面的返回服务器的响应:
So now you can call the above to return you the server's response:
Dim request As New syncWebRequest
request.ajaxGet "http://localhost/ClientDB/AllClients?format=json"
Dim json as string
json = request.Response
这里的问题是我们希望以某种方式读取从服务器返回的数据,而不是直接操作JSON字符串。对我有用的是使用 VBA-JSON (Google代码导出这里)COM类型集合
来处理JSON数组和字典
来处理成员和他们的声明,使用解析器工厂方法解析
,基本上使得创建这些字典集合变得更加简单。
The problem here is we want to be able to read the data returned from the server in some way, more so than manipulating the JSON string directly. What's worked for me is using the VBA-JSON (google code export here) COM type Collection
to handle JSON arrays and Dictionary
to handle members and their declarations, with a parser factory method Parse
that basically makes creating these collections of dictionaries much simpler.
所以现在我们可以解析JSON:
So now we can parse the JSON:
[{"Name":"test name","Surname":"test surname","Address":{"Street":"test street","Suburb":"test suburb","City":"test city"}}]
成如下:
Set clients = parser.parse(request.Response)
For Each client In clients
name = client("Name")
surname = client("Surname")
street = client("Address")("Street")
suburb = client("Address")("Suburb")
city = client("Address")("City")
Next
这很好,但是能够编辑和发布数据的东西呢?那么还有一个方法 toString
可以从上面的[Collection / Dictionary] JSON数据创建JSON字符串,假设服务器接受JSON。
That's nice but what about stuff like being able to edit and post back the data? Well there's also a method toString
to create a JSON string from the above [Collection/Dictionary] JSON data, assuming the server accepts JSON back.
这篇关于JSON导入到Excel的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!