VBA阅读XML性能问题

时间:2019-03-08 14:07:01

标签: excel xml vba xmldom

我已经在这里找到了很多答案,但是似乎没有一个可以解决我的问题。实际上,其他答案中的许多建议已在我的代码中实现。 我有一个巨大的xml文件,必须循环遍历,并且速度确实很慢,每行写入(或每个节点)大约1秒。当我得到少量样本(例如82行(每行约15列))时,也会保持这种速度。这意味着82个主节点,每个主节点有15个子节点。

我的代码如下:

Dim wsBase As Worksheet
Dim linEscrita As Long

Dim resp As MSXML2.DOMDocument60
Dim lista As IXMLDOMNodeList
Dim nodeAtual As IXMLDOMNode
Dim childNode As IXMLDOMNode

Dim charIni As Long
Dim charAt As Long
Dim colAtual As Long

Application.ScreenUpdating = False

Set wsBase = Worksheets("Name of worksheet")

Set resp = New DOMDocument60
resp.LoadXML (FunctionForGettingXMLfromWebService)

linEscrita = 2
'name from Node I must find and get child nodes
Set lista = resp.SelectNodes("//node1/node2")

For Each nodeAtual In lista
    colAtual = 1
    If (nodeAtual.HasChildNodes) Then
        For Each childNode In nodeAtual.ChildNodes
            wsBase.Cells(linEscrita, colAtual) = childNode.text
            colAtual = colAtual + 1
        Next childNode
    End If
    linEscrita = linEscrita + 1
Next nodeAtual

Application.ScreenUpdating = True

此代码甚至实际上与在答案中找到的代码相似,并且在该答案上得到的代码比我的要快得多。这不是基于PC的问题,就像我在其他计算机上尝试过的一样。有没有人经历过类似的事情或不知道可能是什么问题?与PHP一起循环使用时,XML可以快速运行,因此也不会出现XML问题。

1 个答案:

答案 0 :(得分:0)

数组方法

通过VBA在范围内循环总是很耗时。因此,以下代码示例-尽可能接近您的原始帖子 *)-将所需的XML内容写入到预定义的2维数组中({{1}节和[3]),然后通过一条代码行将其写回到工作表([4]节)。 此外,在这个非常基本的XPath模型中,假设所有15个子节点都遵循相同的严格顺序。空行将被省略。

*)您可以通过直接引用@Absinthe提议的子节点来加快速度。

代码示例尽可能靠近您的OP

[5]