我正在尝试使用 MS Excel 来自动填写 Google 表单,但是我在访问时遇到了问题,以前可以使用相同的代码并且我没有进行任何更改。这是代码:
Sub postGoogleData()
Dim params As String, url As String
url = "https://docs.google.com/forms/u/0/d/e/1FAIpQLSejadFloQF5V69ZZ1fc1kManOZ_vMw8kq10-56ENroZ4c6xiw/formResponse"
params = "entry.1880992192=<NAME>&entry.2125520249=<IG>&entry.1421191722=<E>&entry.1858469755=Option+1&entry.1858469755=Option+2&dlut=1632409237551&entry.1858469755_sentinel=&fvv=1&draftResponse=%5Bnull%2Cnull%2C%22-829268773860757612%22%5D&pageHistory=0&fbzx=-829268773860757612"
params = Replace(params, "<NAME>", Range("A1").Value)
params = Replace(params, "<IG>", Range("A2").Value)
params = Replace(params, "<E>", Range("A3").Value)
' add a reference to Microsoft XML 6.0 (tools...reference...microsoft XML v6.0_
Dim http As New MSXML2.XMLHTTP60
http.Open "POST", url, False
http.setRequestHeader "content-type", "application/x-www-form-urlencoded"
http.send params
End Sub
我收到了错误 Access Denied
.我更改了 Internet Explorer 选项:Internet 选项安全 > 自定义安全级别 > 其他 > 跨域访问数据源 > 启用。这消除了错误,但没有填充我的 Google 表单。我试过
MSXML2.ServerXMLHTTP60
但这也没有填充 Google 表单。这里是 spreadsheet其中包含所有响应的摘要。这里是 Google Form .我的目标是使用 Excel 自动填写 Google 表单。此代码以前可以工作,但我遇到了
Access Denied
以前可以工作的文件中的错误。难道是因为谷歌必须在他们的网络服务中实现的改变?我感谢您的帮助。谢谢你。
最佳答案
似乎 Google 会阻止没有 User-Agent
的请求所以你需要添加类似的东西
http.setRequestHeader "User-Agent", "my generic vba script"
在发送参数之前。或者你伪造任何现有的用户代理,比如http.setRequestHeader "User-Agent", "Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405"
添加该行后,答案将出现在电子表格中:像这样使用它
http.Open "POST", url, False
http.setRequestHeader "User-Agent", "my generic vba script"
http.setRequestHeader "content-type", "application/x-www-form-urlencoded"
http.send params
正如您在下面的屏幕录像中看到的那样,它可以工作。我刚刚复制了您的代码,添加了对 Microsoft XML 6.0 的引用,添加了用户代理行并运行它。关于excel - 对公共(public) Google 表单的请求返回 Access Denied : HTTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69309656/