全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

XML转Excel的VBA代码大全 复制粘贴即可用的宏脚本

答案:提供四种VBA方法将XML转Excel,包括标准结构导入、属性节点处理、文件对话框选择及ADODB高效导入,适用于不同XML格式,操作简单且可直接使用。

将XML数据转换为Excel表格,可以通过VBA宏快速实现。以下提供几个实用、可直接复制粘贴使用的VBA脚本,适用于不同XML结构场景,操作简单,无需修改即可运行(部分需根据文件路径调整)。

1. 读取本地XML文件并导入Excel(标准结构)

适用于层级清晰、标签规范的XML文件,自动解析为表格形式。

Sub ImportXMLToExcel()
    Dim xmlDoc As Object
    Dim xmlFile As String
    Dim tableNode As Object, rowNode As Object, fieldNode As Object
    Dim iRow As Long, iCol As Long
    Dim headers As Object
    Set headers = CreateObject("Scripting.Dictionary")
' 修改为你的XML文件路径
xmlFile = "C:\Temp\data.xml"

Set xmlDoc = CreateObject("MSXML2.DOMDocument")
xmlDoc.async = False
xmlDoc.validateOnParse = False
If Not xmlDoc.Load(xmlFile) Then
    MsgBox "加载XML失败,请检查路径或格式", vbCritical
    Exit Sub
End If

' 清空当前工作表
Cells.Clear

' 假设根下是 zuojiankuohaophpcnTableyoujiankuohaophpcn,每条记录是 zuojiankuohaophpcnRowyoujiankuohaophpcn
Set tableNode = xmlDoc.DocumentElement
iRow = 1

For Each rowNode In tableNode.ChildNodes
    iCol = 1
    For Each fieldNode In rowNode.ChildNodes
        ' 写入表头(首次出现的字段)
        If iRow = 1 Then
            If Not headers.Exists(fieldNode.BaseName) Then
                Cells(iRow, iCol).Value = fieldNode.BaseName
                headers.Add fieldNode.BaseName, iCol
                iCol = iCol + 1
            End If
        Else
            ' 查找对应列号并写入数据
            If headers.Exists(fieldNode.BaseName) Then
                Cells(iRow, headers(fieldNode.BaseName)).Value = fieldNode.Text
            End If
        End If
    Next fieldNode
    iRow = iRow + 1
Next rowNode

MsgBox "XML导入完成!", vbInformation

End Sub

2. 处理带属性的XML节点(Attribute模式)

当数据存储在标签属性中时使用,例如:

Sub ImportXMLWithAttributes()
    Dim xmlDoc As Object
    Dim xmlFile As String
    Dim itemNode As Object, attr As Object
    Dim iRow As Long, colDict As Object
    Set colDict = CreateObject("Scripting.Dictionary")
xmlFile = "C:\Temp\items.xml"  ' 修改路径

Set xmlDoc = CreateObject("MSXML2.DOMDocument")
xmlDoc.async = False
If Not xmlDoc.Load(xmlFile) Then
    MsgBox "无法加载XML文件", vbCritical
    Exit Sub
End If

Cells.Clear
iRow = 1

' 遍历所有 Item 节点(根据实际标签名调整)
For Each itemNode In xmlDoc.SelectNodes("//Item")  ' 可改为 //Product 等
    If iRow = 1 Then
        ' 写入表头:属性名
        For Each attr In itemNode.Attributes
            Cells(1, iRow).Value = attr.Name
            colDict(attr.Name) = iRow
            iRow = iRow + 1
        Next attr
    End If

    iRow = iRow + 1
    For Each attr In itemNode.Attributes
        If colDict.Exists(attr.Name) Then
            Cells(iRow, colDict(attr.Name)).Value = attr.Value
        End If
    Next attr
Next itemNode

MsgBox "带属性的XML导入完成!"

End Sub

3. 选择文件对话框动态导入XML

弹出窗口让用户选择XML文件,提升通用性。

Sub BrowseAndImportXML()
    Dim fDialog As Object
    Dim xmlDoc As Object
    Dim xmlFile As String
Set fDialog = Application.FileDialog(3) ' msoFileDialogFilePicker
With fDialog
    .Title = "请选择XML文件"
    .Filters.Add "XML Files", "*.xml", 1
    If .Show = -1 Then
        xmlFile = .SelectedItems(1)
    Else
        Exit Sub
    End If
End With

' 调用第一个脚本逻辑(可整合)
Call LoadXMLData(xmlFile)

End Sub

' 子过程:加载数据 Sub LoadXMLData(xmlPath As String) Dim xmlDoc As Object, tableNode As Object, rowNode As Object, fieldNode As Object Dim iRow As Long, iCol As Long Dim headers As Object Set headers = CreateObject("Scripting.Dictionary")

Set xmlDoc = CreateObject("MSXML2.DOMDocument")
xmlDoc.async = False
xmlDoc.validateOnParse = False
If Not xmlDoc.Load(xmlPath) Then
    MsgBox "解析失败:" & Err.Description
    Exit Sub
End If

Cells.Clear
iRow = 1

Set tableNode = xmlDoc.DocumentElement
For Each rowNode In tableNode.ChildNodes
    iCol = 1
    For Each fieldNode In rowNode.ChildNodes
        If iRow = 1 Then
            If Not headers.Exists(fieldNode.BaseName) Then
                Cells(iRow, iCol).Value = fieldNode.BaseName
                headers(fieldNode.BaseName) = iCol
                iCol = iCol + 1
            Else
                iCol = headers(fieldNode.BaseName)
            End If
        Else
            iCol = headers(fieldNode.BaseName)
        End If
        Cells(iRow, iCol).Value = fieldNode.Text
    Next fieldNode
    iRow = iRow + 1
Next rowNode

MsgBox "已导入:" & xmlPath

End Sub

4. 使用ADODB方式导入(适合大文件)

利用数据库引擎快速加载结构化XML,效率更高。

Sub ImportXMLViaADODB()
    Dim conn As Object, rs As Object
    Dim xmlFile As String
xmlFile = "C:\Temp\data.xml"  ' 修改路径

Set conn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
          Left(xmlFile, InStrRev(xmlFile, "\")) & ";" & _
          "Extended Properties='text;HDR=YES;FMT=Delimited'"

' 注意:此方法依赖XML已映射为文本表,更适合CSV式XML
' 更推荐DOM方式处理复杂结构

' 示例查询(根据实际schema调整)
rs.Open "SELECT * FROM [" & Mid(xmlFile, InStrRev(xmlFile, "\") + 1) & "]", conn

' 输出到Excel
ActiveSheet.Cells.CopyFromRecordset rs

rs.Close
conn.Close
MsgBox "导入完成(ADODB)"

End Sub

使用说明:

  • Alt + F11 打开VBA编辑器,插入模块,粘贴代码
  • 修改 xmlFile 路径为你自己的文件位置
  • 确保启用了 Microsoft XML, v6.0 引用(工具 → 引用)
  • 若XML结构不同,请调整节点名称(如 //ItemDocumentElement

基本上就这些常用方法,按需选用即可。


# excel  # node  # app  # 工具  # 苹果  # csv  # microsoft  # oled  # excel表格  # String  # Object  # xml  # Attribute  # 数据库  # 适用于  # 加载  # 可直接  # 对话框  # 自己的  # 几个  # 第一个  # 首次  # 为你  # 遍历 


相关文章: 如何用搬瓦工VPS快速搭建个人网站?  建站主机功能解析:服务器选择与快速搭建指南  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  如何选择适合PHP云建站的开源框架?  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  如何通过宝塔面板实现本地网站访问?  香港服务器WordPress建站指南:SEO优化与高效部署策略  制作营销网站公司,淘特是干什么用的?  如何快速上传自定义模板至建站之星?  建站之星如何一键生成手机站?  如何获取PHP WAP自助建站系统源码?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  网站制作公司,橙子建站是合法的吗?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  如何高效利用亚马逊云主机搭建企业网站?  金*站制作公司有哪些,金华教育集团官网?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  音响网站制作视频教程,隆霸音响官方网站?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  魔方云NAT建站如何实现端口转发?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  建站之星如何实现五合一智能建站与营销推广?  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  网站制作公司排行榜,抖音怎样做个人官方网站  宝塔面板如何快速创建新站点?  个人摄影网站制作流程,摄影爱好者都去什么网站?  如何在阿里云虚拟服务器快速搭建网站?  ,柠檬视频怎样兑换vip?  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  定制建站是什么?如何实现个性化需求?  常州企业网站制作公司,全国继续教育网怎么登录?  如何获取开源自助建站系统免费下载链接?  想学网站制作怎么学,建立一个网站要花费多少?  如何在阿里云虚拟主机上快速搭建个人网站?  c++ stringstream用法详解_c++字符串与数字转换利器  如何通过多用户协作模板快速搭建高效企业网站?  python的本地网站制作,如何创建本地站点?  黑客如何通过漏洞一步步攻陷网站服务器?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  高性价比服务器租赁——企业级配置与24小时运维服务  建站之星安装后界面空白如何解决?  建站之星后台密码遗忘如何找回?  建站之星如何修改网站生成路径?  SQL查询语句优化的实用方法总结  南宁网站建设制作定制,南宁网站建设可以定制吗?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  如何通过云梦建站系统实现SEO快速优化? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。