2017-10-14 132 views
1

我已經打在磚牆我的頭以下的可愛的難題:上傳Excel電子表格,以谷歌表

的一點是讓從Excel到谷歌表數據,而無需上傳文件,而是通過去網址。下面輕易解釋所有的企業如何蒸騰作用:

https://www.youtube.com/watch?v=mX2_XNYPGiI http://ramblings.mcpher.com/Home/excelquirks/exceldocsintegration/excelsheetsv4

我試着去適應下面的代碼的東西VBA側,共同爲這兩個例子:

Option Explicit 

Sub GetDataFromGoogle() 

'link to tutorial: https://www.youtube.com/watch?v=mX2_XNYPGiI 

Dim link As String 

link = "https://docs.google.com/spreadsheets/d/e/2PACX-1vSes7Jb06JRy8KSFyNlpUSzNQxSB_HZay4S8AB2IqzpZP0QdwGO5PFSS-6uzd8v_GsjlkXM31pby2jE/pubhtml" 
Sheet4.QueryTables(1).Connection = "URL;" & link 
Sheet4.QueryTables(1).Refresh False 
Sheet4.Columns(1).ColumnWidth = 10 

End Sub 

Sub PushDataToGoogle() 



Dim link As String 

link = "https://docs.google.com/forms/d/e/1FAIpQLSeDHEKJmRDynwOAS4g53T9AVMtpXQkWsRGbAzLpLI7rdsbiFA/formResponse?entry.1155739640=4&fvv=1&draftResponse=%5B%5B%5Bnull%2C1155739640%2C%5B%224%22%5D%0D%0A%2C0%5D%0D%0A%5D%0D%0A%2Cnull%2C%2276341394568976993%22%5D%0D" 
'go to that link, refresh it and ensure that the first column isn't too narrow 

sheets("Sheet4").QueryTables(1).Connection = "URL;" & link 

sheets("Sheet4").QueryTables(1).Refresh True 
sheets("Sheet4").Columns(1).ColumnWidth = 10 

End Sub 

在在Google表格方面,我使用表格來創建電子表格,該電子表格既是Excel導入的數據源,也是數據導出的目的地。在表單頁面的HTML中重新定位POST和GET是獲取目標URL的方式。隨後,該URL可以是硬編碼的或與變量以獲得各種輸入所編輯的「條目。######」的URL的一部分,然後將它們傳遞給片材中的下一個可用線路,這將適合我的目的。

我碰釘子(S)與所述操作的OAuth2一部分。從桌面上的解放位點(上述第二連桿)的例子中,從谷歌創建的證書,然後插入到用於認證發送所述數據之前的連接的代碼。因此:

Private Function sheetsOnceOff() 

    getGoogled "sheets", , _ 
    "1023445954023-hq8gkdcmo9sue822d23gy9ak5hmun27.apps.googleusercontent.com", _ 
    "dX7ABCDEGFBETFWtvX5ShmDfrgrQ" 

End Function 

如果沒有這樣做,先前的代碼行將返回主要的Google登錄頁面。我所做的憑據,確定了電子表格中的目的地鍵,但我得到的getGoogled程序一個錯誤,指出:

Runtime-error: '-2147024809 (80070057)': The parameter is incorrect."

參數值如下: - 範圍=「張」,因爲它應該是 - 更換包= 「」 - clientID的是OK - clientSecret是OK - 抱怨=真 - cloneFromScope = 「」 - apikey = 「」

我想更換包不應該如果抱怨是真的,那就空了,但我覺得我已經超出了我的深度這裏。至少需要做些什麼邏輯對我來說很有意義,我已經成功地得到谷歌錶轉移到精細的工作,但我只是不知道如何處理的oauth2認證問題。

預先感謝您。

回答

0

事實證明,該解決方案是相當簡單,由於硒基本庫,可在這裏,有很多有用的信息關於它如何工作的:

https://codingislove.com/browser-automation-in-excel-selenium/

的關注的說明:此下載需要Selenium GoogleChrome驅動程序版本2.33,當前最新版本,以解決Chrome啓動錯誤 - 至少在我的情況,我需要Chrome而不是IE工作。

在任何情況下,Selenium都是處於類似情況的人的上帝。當您下載並安裝Selenium時,請進入VB編輯器中的工具 - >參考,並啓用Selenium類型庫。

下面的代碼將做的工作:

Option Explicit 
Dim myHTML_Element As IHTMLElement 
Dim Driver As New WebDriver 

Sub seleniumtutorial() 

Dim pword As String 
Dim link As String, link2 As String 

pword = ThisWorkbook.sheets("Sheet1").Range("D10") 

Driver.Start "chrome", "https://gmail.com" 
Driver.Get ("https://gmail.com") 
Driver.FindElementById("identifierId").SendKeys "[email protected]" 
Driver.FindElementById("identifierNext").Click 
'Driver.Get ("https://sso.diversey.com/nidp/saml2/sso?id=DIVAuthContract30&sid=0&option=credential&sid=0") 
Driver.FindElementById("uname").SendKeys "Username" 
Driver.FindElementById("pass").SendKeys pword 
Driver.FindElementByName("loginButton2").Click 

link = "https://docs.google.com/forms/d/e/1FAIpQLSeDHEKJmRDyMt7rdsbiFA/formResponse?entry.1155739640=7&fvv=1&draftR=%5B%5B%5Bnull%2C115B%224%22%5D%0D%0A%2C0%5D%%0A%5D%0D%0A%2Cnull%2C%227634134997568976993%22%5D%0D" 
link2 = "https://docs.google.com/spreadsheets/d/1W8A3UuyeEwk6-hqERvuIMT_HInySBOIs/edit#gid=1126962360" 

Driver.Get (link) 
Driver.Get (link2) 

End Sub 

鏈接和鏈接2分別是,它確認響應已提交和LINK2是連接到具有響應列表中的電子表格的頁面。你可以把這個例程分成兩個用戶下的一個日誌,另一個創建一個要輸入到google的項目的數組,在這些點上它只是用新值刷新同一頁面,因爲它循環循環或數組。

還有一個鏈接: Selenium VBA - exit sub without close browser window

使變量公共確保瀏覽器窗口不會關閉在會議結束時,或者你可以宣佈他們的第一子裏面,如果你希望它關閉。至於憑證,您可以硬編碼或從電子表格中提供它們,但這是一個技術問題。除此之外,它似乎是一個非常簡單的例程,它確實做得很好。

Selenium庫的語法明顯比VBA更現代化,我會說它更強大

0

以下是絕不是一個完整的解決方案,但它是一個基本的起點。下面的條件將被記錄到gmail中,並且它會將一段數據移動到帶有時間戳的Google工作表中。它通過直接打開用戶在表單上單擊提交後出現的頁面來工作,從而模仿提交。 Link2打開傳遞響應的電子表格。

的缺點是,它要求用戶必須登錄到Gmail已經和一個變量傳遞每次將打開新的標籤頁,因此避免與陣列或環修改它。不過,我會嘗試將此前的vba gmail項目放在一起,以查看是否可以工作。更多的將會出現,但是對於一個黑客一起的創可貼解決方案,如果有人需要它,這將會實現。

版權和信息在這裏:

[https://p2overflowflow.com。com/questions/3166265/open-an-html-page-in-default-browser-with-vba https://stackoverflow.com/questions/5915325/open-google-chrome-from-vba-excel

Sub PushDataToGoogle() 

Dim chromePath As String 

chromePath = """C:\Program Files\Google\Chrome\Application\chrome.exe""" 

Dim link As String, link2 As String 

link = "https://docs.google.com/forms/d/e/1FAIpQLSeDHEKJmRDynwOAS4gtpXQkWsRGbAzLpLI7rdsbiFA/formResponse?entry.1155739640=4&fvv=1&draftResponse=%5B%5B%5Bnull%2C11557396%224%22%5D%0D%0A%2C0%5D%0D%0A%5D%0D%0A%2Cnull%2C%227634134997568976993%22%5D%0D" 
link2 = "https://docs.google.com/spreadsheets/d/1W8A3UuFQTeEwk6-hqERvuIMT_HInySZTNBOIs/edit#gid=11262360" 

Shell (chromePath & link) 

ThisWorkbook.FollowHyperlink link2 

End Sub