1

我使用下面的代码将 xml 文件转换为 excel 表。但我有严重的性能问题,因为我的文件大小约为 20MB(约 50,000 行)。你能帮我修改代码以包含二维数组部分以提高性能吗?

Sub Convert_Xml()

Dim wb As Workbook
Dim ws As Worksheet
Dim i As Integer

Set wb = ThisWorkbook
Set ws = wb.Sheets("Items")
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.Load ("C:\Users\shlomoe\Downloads\TEST.xml")

Set myNode = xmlDoc.getElementsByTagName("G_1")

For Each myNode In xmlDoc.getElementsByTagName("G_1")
i = i + 1
ws.Cells(i + 1, 1) = myNode.SelectNodes("ORGANIZATION_CODE")(0).Text
ws.Cells(i + 1, 2) = myNode.SelectNodes("ITEM_NUMBER")(0).Text
ws.Cells(i + 1, 3) = myNode.SelectNodes("ITEM_DESCRIPTION")(0).Text
ws.Cells(i + 1, 4) = myNode.SelectNodes("QUANTITY")(0).Text
  
Next myNode

End Sub
4

1 回答 1

0

写入数组而不是范围

Option Explicit

Sub Convert_Xml()

    Dim wb As Workbook: Set wb = ThisWorkbook
    Dim ws As Worksheet: Set ws = wb.Worksheets("Items")

    Dim xmlDoc As Object: Set xmlDoc = CreateObject("Microsoft.XMLDOM")
    xmlDoc.Load ("C:\Users\shlomoe\Downloads\TEST.xml")
    Dim myNodes As Object: Set myNodes = xmlDoc.GetElementsByTagName("G_1")
    
    Dim Data As Variant: ReDim Data(1 To myNodes.Length, 1 To 4)
    
    Dim myNode As Object
    Dim i As Long

    For Each myNode In myNodes
        i = i + 1
        Data(i, 1) = myNode.SelectNodes("ORGANIZATION_CODE")(0).Text
        Data(i, 2) = myNode.SelectNodes("ITEM_NUMBER")(0).Text
        Data(i, 3) = myNode.SelectNodes("ITEM_DESCRIPTION")(0).Text
        Data(i, 4) = myNode.SelectNodes("QUANTITY")(0).Text
    Next myNode

    ws.Range("A2").Resize(i, 4).Value = Data

End Sub
于 2021-04-08T07:37:17.550 回答