0

我正在寻找生成一个excel宏,并希望得到一些方向。我想做的是从 5 个 XML 文件中获取数据并将它们放入一个新的工作簿中,然后以折线图格式绘制结果数据。XML 文件中的数据在所有 5 个文件中都是相同的,格式如下所示:

<Sample Secs="25313">
    <Pout>215280</Pout>
</Sample>
<Sample Secs="25562">
    <Pout>233627</Pout>
</Sample>

在 Excel 中作为 XML 表打开时,显示为:

25313   215280
25562   233627

分别带有“Secs”和“Pout”的标题。“Secs”列在 A 列中的所有 5 个文件之间是通用的,然后唯一数据位于 B 列中的“Pout”列中。B 列的每个文件中大约有 1500 个数据点。什么我想要完成的是打开所有 5 个 XML 文件,从每个文件中提取唯一数据,然后绘制数据。在绘图之前,我希望新的 Excel 工作簿看起来像这样格式化:

Secs  Pout1  Pout2  Pout3  Pout4  Pout5

“Secs”的数据来自 5 个文件中的任何一个(因为它很常见),并且 B 列数据被放入相应的 Pout# 列中。

有没有办法让 Excel VBA 做到这一点,我将如何进行设置?

4

1 回答 1

0

有关详细信息,请参阅此 MSDN 页面

 Option Explicit

    Private Sub LoadXmlData()

    Dim xmlDoc As New DOMDocument60
    Dim sSecs As String, sPout As String
    Dim iNodes As Integer, i As Integer, t As Integer
    Dim sPath1 As String, sPath2 As String, sPath3 As String, _
        sPath4 As String, sPath5 As String, sTempPath As String

    Range("A1").Value2 = "Secs"
    'Set the file paths of your xml documents here

    sPath1 = ""
    sPath2 = ""
    sPath3 = ""
    sPath4 = ""
    sPath5 = ""

    For t = 0 To 4
        Select Case t
            Case 0
                sTempPath = sPath1
            Case 1
                sTempPath = sPath2
            Case 2
                sTempPath = sPath3
            Case 3
                sTempPath = sPath4
            Case 4
                sTempPath = sPath5
        End Select

        xmlDoc.Load (sTempPath)
        iNodes = xmlDoc.DocumentElement.ChildNodes.Length

        'Fill in the first column with the values from the attribute Secs
        'Only do it once because the values are the same in each file
        If t = 0 Then
            For i = 0 To iNodes - 1
                Range("A" & i + 2).Value2 = xmlDoc.DocumentElement.ChildNodes.Item(i).Attributes.Item(0).Text
            Next i
        End If

        'Fill in the Pout column
        Cells(1, t + 1).Value2 = "Pout" & t + 1
        For i = 0 To iNodes - 1
            Cells(i + 2, t + 1).Value2 = xmlDoc.DocumentElement.ChildNodes.Item(i).nodeTypedValue
        Next i
    Next t

End Sub
于 2013-07-13T17:22:40.600 回答