我正在编写一个excel电子表格,用于名为Eve Online的游戏。我的电子表格需要通过名为eve-marketdata.com的数据提供商网站自动检索数据。在eve-marketdata的开发者页面上:http://eve-marketdata.com/developers/item_history2.php它通过http发送“发布”请求,提供了有关如何请求数据的一些说明。
例如:用于市场历史记录请求的网址是:http://api.eve-marketdata.com/api/item_history2.xml?char_name=venoushka patel然后,假设我想从区域10000002检索项目ID 34的45天数据。我会放在最后url:item_id = 34,days = 45和region_ids = 10000002,每个由&分隔。成品的符号:api.eve-marketdata.com/api/item_history2.xml?char_name=venoushka patel& type_ids = 34& region_ids = 10000002& days = 45(删除了http://由于对此发布规定位点)
因此,我需要某些单元格使用电子表格中的信息(例如商品ID,区域ID等)来解析相应的网址,将网址提交到网站,然后只获取我要查找的信息并将其放入一个单元格。由于他们的'importxml'功能利用xpath,目前谷歌文档而不是excel更容易。但是,谷歌文档将xml调用的数量限制为每个电子表格50个,而我的电子表格将有几千个,所以我必须使用excel。
不,我不会使用'从web导入'或'map xml'到excel中的单元格功能,因为我在电子表格中有数千个这样做,而不是时间或资源效率。
我被告知可以使用以下vba代码完成此操作:
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
URL = "http://www.somedomain.com"
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")
问题是,虽然我非常擅长编写excel电子表格,但我之前从未使用过VBA。我知道如何打开visual basic编辑器,但这就是它。首先:
如何将其粘贴到vba编辑器中,然后在我的工作簿中调用它?我相信我必须在开头和结尾处输入类似function()的内容,对吧?
如何在工作表中调用此函数来执行我需要它执行的操作?
有人可以解释上面代码的作用,以及我如何修改它以执行我的任务?
事先,我真的很感激任何收到的帮助,社区的很大一部分(数千人)需要一种方法来做到这一点!
答案 0 :(得分:2)
你不会那样做。首先,请求是GET而不是POST,因此改变了一些事情。您可以使用以下内容:
Function ImportData(sUrl As String) As Variant
Dim oDoc As Object
Dim oAttr As Object
Dim oRow As Object
Dim x As Long: x = 1
Dim y As Long: y = 1
Dim vData() As Variant
Set oDoc = CreateObject("MSXML2.DOMDocument")
With oDoc
.Load sUrl
Do: DoEvents: Loop Until .readystate = 4
ReDim vData(1 To .getElementsByTagName("row").Length, 1 To 8)
For Each oRow In .getElementsByTagName("row")
For Each oAttr In oRow.Attributes
vData(x, y) = oAttr.Text
y = y + 1
Next oAttr
y = 1
x = x + 1
Next oRow
End With
ImportData = vData
End Function
Public Sub Test()
Dim g
'g = ImportData("http://api.eve-marketdata.com/api/item_history2.xml?char_name=venoushka%20patel&type_ids=34®ion_ids=10000002&days=45")
'or
g = ImportData(Sheets(1).range("a1").Value)
Sheets(1).Cells(2, 1).Resize(UBound(g), UBound(g, 2)).Value = g
End Sub
您可以将其置于正常模块中然后运行宏Test
来测试它,您可以看到您放置网址的位置。我不得不承认,你可能会因为这个问题而陷入陡峭的学习困境,但这并不是削减你的VBA牙齿的最简单的项目