Google의 oAuth 2.0 통합을 사용하여 Excel에서 Google Analytics API에 대한 액세스 토큰을 가져와야하는 작업을하고 있습니다.Excel VBA 셀은 값이 있음에도 불구하고 "0"을 반환합니다.
초기 요청은 내 워크 시트의 셀에 저장된 클라이언트 ID, 비밀 키 및 인증 토큰을 전달하여 작동합니다.
UDF는 그래서 같은 외모를 사용하고 있습니다 :
내 워크 시트에서Public Function GetGAAuthenticationToken _
(ByVal ClientId As String, _
ByVal ClientSecret As String, _
ByVal code As String, _
accessToken As String, _
RefreshToken As String, _
accessTokenExpires As Date)
'Has token expire? If not, don't renew the access token.
Dim Token(2, 0)
Dim Refresh As Boolean: Refresh = True
If Now < accessTokenExpires Then
Token(0, 0) = accessToken
Token(1, 0) = RefreshToken
Token(2, 0) = accessTokenExpires
Refresh = False
End If
Dim objhttp As Object
Dim ResponseText As String
If Refresh Then
If RefreshToken = "" Or RefreshToken = "0" Then
'Initial authorization code=GetGAAuthenticationToken(B1, B2, B4, B6, B7, B8)
Set objhttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")
URL = "https://accounts.google.com/o/oauth2/token"
objhttp.Open "POST", URL, False
objhttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objhttp.setTimeouts 1000000, 1000000, 1000000, 1000000
objhttp.send ("code=" & code & "&client_id=" & ClientId & "&client_secret=" _
& ClientSecret _
& "&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2%2E0%3Aoob&grant_type=authorization_code")
ResponseText = objhttp.ResponseText
Else
'Refresh Token
Set objhttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")
URL = "https://accounts.google.com/o/oauth2/token"
objhttp.Open "POST", URL, False
objhttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objhttp.setTimeouts 1000000, 1000000, 1000000, 1000000
objhttp.send _
("client_id=" & ClientId _
& "&client_secret=" & ClientSecret & "&refresh_token=" _
& RefreshToken & "&grant_type=refresh_token")
ResponseText = objhttp.ResponseText
End If
Dim XMLResponse: Set XMLResponse = JSONtoXML(ResponseText)
Dim XMLResult: Set XMLResult = XMLResponse.SelectSingleNode("//XML")
If Not IsNull(XMLResult.GetAttribute("access_token")) Then
Token(0, 0) = XMLResult.GetAttribute("access_token")
End If
If Not IsNull(XMLResult.GetAttribute("refresh_token")) Then
Token(1, 0) = XMLResult.GetAttribute("refresh_token")
Else
Token(2, 0) = RefreshToken
End If
If Not IsNull(XMLResult.GetAttribute("expires_in")) Then
If IsNumeric(XMLResult.GetAttribute("expires_in")) Then
Token(2, 0) = DateAdd("s", CInt(XMLResult.GetAttribute("expires_in")), Now)
Else
Token(2, 0) = DateAdd("s", 3600, Now)
End If
Else
Token(2, 0) = DateAdd("s", 3600, Now)
End If
End If
GetGAAuthenticationToken = Token
End Function
내가 함수를 호출 세포의 배열을 가지고 :
=GetGAAuthenticationToken(B1, B2, B4, B5, B6, B7)
은 제가 위에서 말했듯이의 초기 요청은 잘 작동하고 액세스 토큰, 새로 고침 토큰 및 액세스 토큰 만료 날짜를 셀 B5, B6 및 B7로 출력합니다.
그러나 요청을 다시 실행하면 B5, B6 및 B7의 값이 내 UDF로 전달 될 것으로 예상되는데,이 요청은 다시 "0"으로 전달됩니다. 업데이트와 UDF 실행을 트리거하는 사이에 다시 설정되는 것 같습니다. 이 가치를 얻을 수 있습니까?
나는이 페이지를 보았습니다. http://fastexcel.wordpress.com/2012/01/08/writing-efficient-vba-udfs-part-8-getting-the-previously-calculated-value-from-the-calling-cells/ 이것은 내가하려고하는 것과 비슷하게 보입니다. 그러나 이것은 배열이 아닌 하나의 필드로 보입니다.
저는 Excel과 VBA에서 전혀 경험이 없으므로 도움을받을 수 있습니다.
감사합니다.
의견을 보내 주셔서 감사합니다. 불행히도 저는 여전히 'AccessToken','RefreshToken' 및'AccessTokenExpires' 셀에서 "0"을 얻고 있습니다. 다른 셀은 코드를 사용하여 값을 잘 반환합니다 ... –