Excel VBA生成XML文件:添加元素注释与格式化问题求助
解决Excel VBA生成XML的注释与格式化问题
修改后的完整VBA代码
Public Sub ExportXMLfile() Dim doc As Object Dim Root As Object Dim pi As Object Dim Cdata As Object Dim Product As Object Dim Element1 As Object, Element2 As Object, Element3 As Object Dim commentNode As Object Dim i As Integer ' 初始化DOM文档并配置格式化属性 Set doc = CreateObject("MSXML2.DOMDocument") doc.preserveWhiteSpace = False ' 关闭空白保留,让XML自动处理格式 doc.async = False ' 添加XML声明 Set pi = doc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""") doc.appendChild pi ' 创建根节点 Set Root = doc.createElement("Document") Root.setAttribute "generated", Now doc.appendChild Root For i = 1 To 3 Set Product = doc.createElement("Product") Root.appendChild Product ' 生成Element1及对应注释 Set Element1 = doc.createElement("Element1") Set Cdata = doc.createCDATASection(i) Element1.appendChild Cdata Product.appendChild Element1 Set commentNode = doc.createComment(" element1 ") Product.appendChild commentNode Product.appendChild doc.createTextNode(vbNewLine & vbTab & vbTab) ' 生成Element2及对应注释 Set Element2 = doc.createElement("Element2") Element2.Text = i Product.appendChild Element2 Set commentNode = doc.createComment(" element2 ") Product.appendChild commentNode Product.appendChild doc.createTextNode(vbNewLine & vbTab & vbTab) ' 生成Element3及对应注释 Set Element3 = doc.createElement("Element3") Element3.Text = i Product.appendChild Element3 Set commentNode = doc.createComment(" element3 ") Product.appendChild commentNode Product.appendChild doc.createTextNode(vbNewLine & vbTab) Next ' 根节点末尾添加换行 Root.appendChild doc.createTextNode(vbNewLine) Debug.Print doc.XML End Sub
关键修改说明
1. 实现元素后添加注释
使用doc.createComment()方法创建指定内容的注释节点,在每个元素添加完成后,将注释节点追加到父节点(Product)中,配合文本节点的换行缩进,保证注释与元素对齐。
2. 实现XML美观格式化
- 设置
doc.preserveWhiteSpace = False:让DOM引擎自动处理空白内容,避免手动添加的换行和缩进被忽略; - 调整文本节点的缩进层级(
vbTab的数量):确保每个元素、注释、节点之间的换行和缩进严格对应期望格式; - 移除原代码中重复的根节点查询操作,直接复用已创建的Root对象,提升代码效率。
运行修改后的代码,输出的XML将完全匹配你期望的格式。
内容的提问来源于stack exchange,提问作者krzychu82
相关产品推荐
相关产品推荐

