我目前有一些(目前有4个)单独的函数可以将数据从XML网页导入Excel工作表。它工作得很好,除了表总是添加标题。
Sub XMLImportMINS()
On Error GoTo Errorcatch
ActiveWorkbook.XmlImport URL:= _
"http://api.eve-central.com/api/marketstat?typeid=34&typeid=35&typeid=36&typeid=37&typeid=38&typeid=39&typeid=40&typeid=25595&typeid=25605&typeid=25600&typeid=25599&typeid=25590&typeid=25601&typeid=25603&typeid=25588&typeid=25594&typeid=25602&typeid=25598&typeid=25606&typeid=2367&typeid=2348&typeid=11399&typeid=33539&typeid=2346&typeid=12836&usesystem=30000142", _
ImportMap:=Nothing, _
Overwrite:=True, Destination:=Range("ISKValues!$H$4")
Exit Sub
Errorcatch:
MsgBox Err.Description
End Sub
相当简单的脚本只是为了从eve-central.com检索存储在网页上的数据。它将输入一个包含与typeID一样多的行的表(在本例中为25),但它会在顶部添加一个标题。
然后标题意味着导入我需要的四个表格的数据,每个表格将它们分开1个,最后会看到相当杂乱的标题。我可以手动编辑它们并刷新表格,但重新启动excel后连接会搞乱(这就是我从手动导入到基于VBA的导入的原因)。
我不确定如何使用Excel VBA编辑表格属性,但我认为我可以在初始导入中将它们分开1,编辑表格中的标题并将表格全部移动以使其正确放置?< / p>
答案 0 :(得分:1)
很抱歉发布这样一个不完整的答案,但结果却是大量工作。
基本上,我认为你可以做的是从API中加载多个查询(每次查询提到25个ID的限制)到MSXML2对象中。然后,您可以在代码中组合您要查找的结果,然后导出到工作表。我有一切工作,除了导出到工作表(证明是用尽代码)。
以下是我的工作(注意请务必设置对Microsoft XML v6.0的引用):
Public Sub getXML()
Dim i As Long
Dim iLast As Long
Dim xmlFirst As MSXML2.DOMDocument60
Set xmlFirst = New MSXML2.DOMDocument60
Dim xmlSecond As MSXML2.DOMDocument60
Set xmlSecond = New MSXML2.DOMDocument60
' grab the first set of data
xmlFirst.validateOnParse = True
xmlFirst.Load "http://api.eve-central.com/api/marketstat?typeid=25595&typeid=25605&typeid=25600&typeid=25599&typeid=25590&typeid=25601&typeid=25603&typeid=25588&typeid=25594&typeid=25602&typeid=25598&typeid=25606&typeid=2367&typeid=2348&typeid=11399&typeid=33539&typeid=2346&typeid=12836&usesystem=30000142"
' grab the second set of data
xmlSecond.validateOnParse = True
xmlSecond.Load "http://api.eve-central.com/api/marketstat?typeid=34&typeid=35&typeid=36&typeid=37&typeid=38&typeid=39&typeid=40"
' wait for the XML to load into the objects
While (xmlFirst.readyState <> 4 Or xmlSecond.readyState <> 4)
DoEvents
Wend
' combine the second query into the first
iLast = xmlSecond.ChildNodes(1).ChildNodes(0).ChildNodes.Length - 1
For i = 0 To iLast
xmlFirst.ChildNodes(1).ChildNodes(0).appendChild xmlSecond.ChildNodes(1).ChildNodes(0).ChildNodes(0)
Next
End Sub
更难的部分实际上是将这些数据发送到工作表。我无法想出一个简单的方法来做到这一点。我试过跟this answer,但我觉得它比这更复杂。
顺便说一句,这部分代码:
xmlFirst.ChildNodes(1).ChildNodes(0).appendChild xmlSecond.ChildNodes(1).ChildNodes(0).ChildNodes(0)
我能够通过查看Locals窗口并深入挖掘节点来解决这个问题。
我希望这可以帮助您至少将数据合并到一个来源中。