0

0

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

小老鼠

小老鼠

发布时间:2025-12-02 23:19:02

|

425人浏览过

|

来源于php中文网

原创

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

xml转excel的vba代码大全 复制粘贴即可用的宏脚本

将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

磁力开创
磁力开创

快手推出的一站式AI视频生产平台

下载

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

当数据存储在标签属性中时使用,例如:苹果" Price="5.0"/>

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

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

443

2023.08.02

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1898

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2091

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1060

2024.11.28

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

356

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2080

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

348

2023.08.31

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

256

2023.09.05

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 3.1万人学习

Kotlin 教程
Kotlin 教程

共23课时 | 2.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号