我的头撞在砖墙上,遇到了以下可爱的难题:
关键是在不上传文件的情况下,从Excel获取数据到Google,但要经过URL。下面简单地解释了所有这些业务是如何发生的:
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导入的数据源,也是数据导出的目的地。Replcaing和GET在表单页面的HTML中是获取目标URL的方法。随后,可以硬编码该URL,也可以用变量编辑该URL的"entry.######“部分的各种输入,然后将它们传递到下一行的工作表中,这符合我的目的。
我在操作的oAuth2部分遇到了一个障碍。从桌面解放站点上的示例(上面的第二个链接),凭据是从Google创建的,然后在传输数据之前插入到验证连接的代码中。因此:
Private Function sheetsOnceOff()
getGoogled "sheets", , _
"1023445954023-hq8gkdcmo9sue822d23gy9ak5hmun27.apps.googleusercontent.com", _
"dX7ABCDEGFBETFWtvX5ShmDfrgrQ"
End Function
如果没有这样做,前面的代码行将只返回主要的Google登录页面。我已经制作了凭据,确定了电子表格的目标键,但是在getGoogled例程中出现了一个错误,即:
运行时-错误:'-2147024809 (80070057)':参数不正确。“
参数值如下:- scope = 'sheets',应该是- clientID ="“- clientSecret是OK -clientSecret= true - cloneFromScope = "”-cloneFromScope=“.”
我在想,如果抱怨是真的,替换包就不应该是空的,但是我觉得我在这里已经超出了我的深度。至少对我来说,所需要发生的事情的逻辑是有意义的,而且我已经设法使从Google上的转换工作得很好,但我只是不知道如何处理oAuth2身份验证问题。
提前谢谢你。
发布于 2017-10-18 02:45:44
结果,这个解决方案要简单得多,这要归功于这里提供的Selenium Basic库,其中包含了许多关于它的工作原理的有用信息:
https://codingislove.com/browser-automation-in-excel-selenium/
请注意:此下载需要Selenium GoogleChrome驱动程序版本2.33,即当前的最新版本,以解决Chrome启动正常时出现的错误--至少在我的情况下,我需要Chrome而不是IE。
无论如何,硒对处于类似情况的人来说是天赐之物。下载和安装Selenium时,进入VB编辑器中的工具-->引用,并启用。
以下代码将完成此工作:
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 "user@company.com"
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
链接和link2分别是确认响应已提交的页面,link2是指向具有响应列表的电子表格的链接。您可以将这个例程划分为两个子程序--一个在用户中登录,另一个创建一个要输入给google的项数组,在这个数组上,当它在循环或数组中循环时,它只是用新的值刷新相同的页面。
另一个链接:Selenium VBA - exit sub without close browser window
将变量公开确保浏览器窗口不会在会话结束时关闭,或者您可以在第一个子部分中声明它们,如果您希望它关闭的话。至于凭据,您可以硬编码它们,也可以从电子表格中输入它们,但这是一个技术性问题。除此之外,这似乎是一个非常简单的例行公事,而且它做的真的很好。
Selenium库的语法显然比VBA更现代,而且我认为它的功能要强大得多。
发布于 2017-10-17 00:17:12
以下并不是一个完整的解决方案,但它只是一个初步的开始。下面的条件是登录到gmail,它将带时间戳将一段数据移动到Google中。它的工作方式是直接打开用户在表单上单击Submit后出现的页面,从而模仿提交。Link2打开传递响应的电子表格。
缺点是,它要求用户已经登录到gmail,并且每次传递变量时都会打开一个新的选项卡,因此避免使用数组或循环修改它。不过,我将尝试将以前的vba项目与此结合起来,看看是否可以工作。更多的将是即将到来,但如果有人需要的话,如果有人需要的话,这将是一个被黑客入侵的乐队辅助解决方案。
信贷和信息在这里:
[https://stackoverflow.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
https://stackoverflow.com/questions/46740128
复制相似问题