JSON导入到Excel

use*_*706 31 api excel json google-docs

是否可以在宏中编写JSON调用脚本?

我想通过API连接获取JSON字符串.看起来问题是Excel期望参数在HTML字符串中传递,但JSON传递HTML主体中的参数.有任何想法吗?

alm*_*ori 42

由于这是VBA,我使用COM来调用,xmlhttprequest但是以同步的方式使用它,以免扰乱VBA的单线程执行环境.以这种方式说明postget请求的示例类如下:

'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   
Run Code Online (Sandbox Code Playgroud)

所以现在你可以调用上面的命令来返回服务器的响应:

Dim request As New syncWebRequest
request.ajaxGet "http://localhost/ClientDB/AllClients?format=json" 
Dim json as string 
json = request.Response
Run Code Online (Sandbox Code Playgroud)

这里的问题是我们希望能够以某种方式读取从服务器返回的数据,而不是直接操作JSON字符串.对我来说有用的是使用VBA-JSON(这里是谷歌代码导出)COM类型Collection来处理JSON数组并Dictionary处理成员及其声明,使用解析器工厂方法Parse基本上使创建这些字典集合变得更加简单.

所以现在我们可以解析JSON了:

[{"Name":"test name","Surname":"test surname","Address":{"Street":"test street","Suburb":"test suburb","City":"test city"}}]
Run Code Online (Sandbox Code Playgroud)

如下所示:

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
Run Code Online (Sandbox Code Playgroud)

这很好,但是能够编辑和回发数据等内容呢?好吧,还有一种toString从上面的[Collection/Dictionary] JSON数据创建JSON字符串的方法,假设服务器接受JSON.

  • 我不敢相信这在此之前尚未被接受/投票.你完全解决了我的问题 - 谢谢! (3认同)

Bjo*_*iel 9

我为此写了一个.NET Excel-Addin.它是一个通用的Excel JSON客户端,可以通过http直接将任何JSON对象流式传输到Excel中.

文档和安装说明可在此处找到:http: //excel-requests.pathio.com/en/master/

而这里的GitHub的链接: https://github.com/ZoomerAnalytics/excel-requests

  • 它需要更长的时间,但这是新的Addin(在新的名称Excel请求下):http://excel-requests.readthedocs.io/en/latest/.下载powershell脚本并执行以安装正确的版本. (2认同)