2015-02-23 70 views
-2

我想從我寫的Excel宏連接到一個Cloudant數據庫。該宏本質上需要在特定字段中查找另一個字段上的數據。例如:對於ID =「2」,返回字段「名稱」中的數據。有誰知道這是可能的嗎?通過Excel連接到Cloudant宏

謝謝。

編輯:我已經發布了一個回答我自己的問題。我發佈的答案從指定的數據庫獲取所有文檔。從這裏你可以查詢等獲得你正在尋找的具體數據。您還可以使用Excel宏JSON解析器,找到here來幫助對數據進行排序。我使用的Base64Encoder可以找到here

回答

1

如果有人搜索到這個,我想我會上傳對這個問題的實際回覆(近一個月後),而不僅僅是「是的,這是可能的」。

由於Cloudant需要基本身份驗證,我發現做到這一點的方法是如下:

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") 
Dim response As String 
    'Sameple URL: https://ibmcds.cloudant.com/sandbox/_all_docs 
URL = "https://" + CloudantUsername + ".cloudant.com/" + DatabaseName + "/_all_docs" 
With objHTTP 
    .Open "GET", URL, False 
    .SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" 
    .SetRequestHeader "Content-Type", "application/json" 
    .SetRequestHeader "Accept", "application/json" 
    .SetRequestHeader "Authorization", "Basic " + Base64Encode(CloudantUsername + ":" + CloudantPassword) 
    .Send ("") 
End With 
response = objHTTP.responseText 

在這個例子中,Base64Encode函數只是編碼給定的字符串。你可以使用任何Base64編碼器。

如果你想檢查請求的狀態,你可以使用:

If objHTTP.Status = 200 Then 
    response = objHTTP.responseText 
    MsgBox "This request is valid.", vbOKOnly 
Else 
    MsgBox "This request is not valid.", vbOKOnly 
End If 

或類似的東西。

我希望這可以幫助任何其他人可能想要做這樣的事情。

2

From the documentation:

到Cloudant所有請求都在網上,這意味着可以在網上發言的任何系統,可以對Cloudant說話。 Cloudant的所有特定於語言的庫都只是提供一些便利和語言細節的包裝程序,可幫助您使用簡單的API。

現在,你的問題:

有誰知道/這怎麼可能?

VBA能夠發送和接收HTTP請求,這可以使用Excel(或任何其他可以運行VBA的應用程序)。

+0

你有例子嗎?我不確定如何做到這一點。 – Julie 2015-02-23 21:08:25

+0

我從來沒有聽說過Cloudant,直到你今天問這個問題,所以我不能在這方面爲你提供任何具體的幫助。你究竟在問什麼?因爲你的編輯表明你正在尋找某個人從頭開始教你一切。你已經知道VBA了嗎? – 2015-02-23 21:22:48

+0

我可以將整個宏寫入實際的數據庫連接。我編寫了大量宏,但從未連接到Cloudant數據庫。我已經看過連接到SQL數據庫的一些[示例](http://stackoverflow.com/questions/1120674/accessing-sql-database-in-excel-vba),但我不知道如何與此關聯到Cloudant,我不知道該怎麼辦爲ID =「2」,因爲我不熟悉數據庫的東西,所以返回字段「Name」中的數據。 – Julie 2015-02-23 21:39:51