我在Excel中使用两个不同的Web查询时遇到了一些问题。
1)网站:http://www.danielsoper.com/statcalc3/calc.aspx?id=44
麻烦:我似乎无法获得查询的结果值。基本上,我在excel电子表格中输入参数,我想要结果。我不知道是否相关,但结果仅在您按下计算后才存在。看起来很简单,但我遇到了一些麻烦...
2)网站:http://www.iea.org/statistics/statisticssearch/report/?&country=USA&year=2011&product=Balances
麻烦:我相信也许这个与查询本身无关,因为我确实获得了数据,但结果似乎是加密的......我根本不知道这是不是我做错了或者如果有办法克服这一点。
从我的角度来看,即使第一个SEEMS更容易修复,第二个对我的研究非常有帮助。
我感谢你能给我的任何帮助。
谢谢,
答案 0 :(得分:1)
对于iea,他们希望您订阅他们的“在线数据服务”,以便他们对所有搜索结果数据进行编码。
对于danielsoper,结果是通过ASP生成的,因此您将无法从Web查询中获取结果。你可以使用VBA和MSXML来获取它们,但你最好只是在VBA中复制算法或者修改一个不同的网站。
答案 1 :(得分:0)
以下代码适用于您的第一个网站。将输入放在单元格“A1”和“A2”中,结果放在“A3”和“A4”中。修改以适合您的工作表。
' Open IE, navigate to the website of interest and loop until fully loaded
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Visible = True
.navigate "http://www.danielsoper.com/statcalc3/calc.aspx?id=44"
.Top = 50
.Left = 530
.Height = 400
.Width = 400
Do Until Not ie.Busy And ie.ReadyState = 4
DoEvents
Loop
End With
' Insert data from cells "A1" and "A2" into the webpage and click "Calculate!"
ie.Document.getElementById("pageContent_gridParameters_txtParameterValue_0").Value = Range("A1")
ie.Document.getElementById("pageContent_gridParameters_txtParameterValue_1").Value = Range("A2")
ie.Document.getElementById("pageContent_btnCalc").Click
' Collect the results and place them on the activesheet
my_var = ie.Document.body.innerhtml
pos_1 = InStr(1, my_var, "Result_0", vbTextCompare)
pos_2 = InStr(pos_1, my_var, ">", vbTextCompare)
pos_3 = InStr(pos_1, my_var, "<", vbTextCompare)
One_Tailed = Mid(my_var, 1 + pos_2, pos_3 - (1 + pos_2))
pos_4 = InStr(pos_3, my_var, "Result_1", vbTextCompare)
pos_5 = InStr(pos_4, my_var, ">", vbTextCompare)
pos_6 = InStr(pos_5, my_var, "<", vbTextCompare)
Two_Tailed = Mid(my_var, 1 + pos_5, pos_6 - (1 + pos_5))
Range("A3") = One_Tailed
Range("A4") = Two_Tailed