试图通过Excel从网站检索XML数据

我正在写一个excel电子表格,用于在线游戏Eve Online。 我的电子表格需要通过名为eve-marketdata.com的数据提供商网站自动检索数据。 在eve-marketdata的开发者页面上: http ://eve-marketdata.com/developers/item_history2.php它给出了一些关于如何通过http发送“发布”请求来请求数据的说明。

例如:用于市场历史请求的url是: http: //api.eve-marketdata.com/api/item_history2.xml ? char_name=venoushka patel然后,可以说我想检索45天的数据项id 34,来自地区10000002.我会放在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等)来parsing相应的URL,将URL提交到站点,然后仅抓取我正在查找的信息并将其放置进入细胞。 这是目前在谷歌文档,而不是Excel,因为他们的'importxml'function利用xpath更容易。 但是,谷歌文档限制XML电话的数量为每个电子表格50,我的电子表格将有几千,所以我必须使用Excel。

不,我不打算在Excel中使用“从networking导入”或“映射xml”到单元格function,因为我在电子表格中有数以千计的这些function,而不是时间和资源效率。

我被告知可以使用下面的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。 我知道如何打开视觉基本编辑器,但这是关于它。 首先:

我如何将其粘贴到vba编辑器中,然后在我的工作簿中调用它? 我相信我将不得不把类似function()的东西在开始和结束function,对吧?

我如何在我的工作表中调用这个函数来完成我所需要的function?

有人可以解释上面的代码是做什么的,以及我需要如何修改它来执行我的任务?

在此之前,我真的非常感谢所获得的帮助,而社区中有很大一部分人(那里有数千人)需要一种方法来做到这一点!

你不会这样做的。 首先,请求是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&region_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 

你可以通过把它放在一个普通的模块然后运行macros来testing它, Test你可以看到你的url。 我不得不承认,虽然你可能会用这个陡峭的学习曲线,这不会是最简单的项目来削减你的VBA的牙齿