2

次のようなxmlドキュメントがあります。

<rng>
  <col1>
    <row1>A</row1>
    <row2>B</row2>
    <row3>C</row3>
    <row4>D</row4>
  </col1>
  <col2>
    <row1>E</row1>
    <row2>F</row2>
    <row3>G</row3>
    <row4>H</row4>
  </col2>
</rng>

さらに多くの col ノードがあり、それぞれに数千の行要素が含まれています。

行要素から値を解析し、最終的にそれらをスプレッドシートに配置したいと思います。私は現在、次のようにこれを行っています:

' get a list of the col elements (thi sits in a loop to go through them all)
Set oXMLColNodeList = oXMLDoc.selectNodes("//saveStates/rng/*")

' Lop through each column
For colNum = 1 To oXMLColNodeList.Length
    ' get all the row nodes for that coulmn
    Set oXMLRowNodeList = oXMLDoc.selectNodes("//saveStates/rng"/col" & colNum & "/*")

    ' loop through all the row nodes
    For rowNum = 1 To oXMLRowNodeList.Length
       ' get the node to do something with it 
       Set oXMLNode = oXMLDoc.selectSingleNode("//saveStates/rng/col" & colNum & "/row" & rowNum)


    next rowNum
next colNum

つまり、列ノードをループしてから、各行ノードを介して値 A、B、C、D などを取得しています。行要素の数が数万に達すると、壊滅的に遅くなります。

XML ドキュメントからの解析の経験はあまりありません。「row*」ノードからすべての値をループ処理せずに同時に抽出する方法を探しています。これは可能ですか?

4

2 に答える 2

0

おそらく、ADO DB Recordsetを使用して xml DOM ドキュメントを Recordset で開き、Range.CopyFromRecordsetメソッドを使用してデータを Excel にダンプし、フィルタを追加して必要なレコードのみを取得できますか?

MSDNのサンプル コードを次に示します: XML からレコードセットを取得する方法

Public Function RecordsetFromXMLDocument(XMLDOMDocument As DOMDocument) As Recordset
Dim oRecordset As ADODB.Recordset
dim destRange as range

set destrange=range("B2")

Set oRecordset = New ADODB.Recordset

oRecordset.Open XMLDOMDocument 'pass the DOM Document instance as the Source argument

Set RecordsetFromXMLDocument = oRecordset  'return the recordset

destRange.CopyFromRecordset oRecordset 

Set oRecordset = Nothing

End Function
于 2013-04-25T11:22:49.647 に答える