65.9K
CodeProject 正在变化。 阅读更多。
Home

在 VBA 中将 Excel 导出到 XML

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.74/5 (30投票s)

2004 年 5 月 4 日

CPOL

2分钟阅读

viewsIcon

471074

downloadIcon

28806

VBA 用于从 Excel 表格生成干净的 XML 文件,该表格支持嵌套节点。

Sample Image - xls2xml.jpg

引言

在 Excel XP 中,有一个新的导出 XML 选项。然而,我得到的是许多无用的标签(我太失望了……)。然后,我在 Google(我们友好的搜索引擎)上搜索了“将 Excel 转换为 XML”一段时间,得到的结果是简单的将关系表转换为 XML 的工具。但是,我想要的是对嵌套结构的支持(例如 <data><field1>....</field1><data>)。因此,我决定使用 VBA 自己编写……(别问我为什么使用 VBA……也许以后我会把它移植到我最喜欢的 C++ 平台。:)

Using the Code

源代码包含 2 个函数 GenerateXMLDOM()fGenerateXML()。它们实际上以不同的方式执行相同的操作。

GenerateXMLDOM -- 提供一个 Microsoft XMLDOM 对象,你可以随时使用“Save”方法对其进行操作或序列化为 XML。

fGenerateXML -- 生成一个长字符串,可以直接作为文件输出(更具可读性,因为添加了适当的换行符)。

这两个函数具有相同的参数。第一个是 rngData,它是 Excel 工作表中用于转换的选定表格区域。第二个 (rootNodeName) 是 XML 中使用的第一个/根节点的名称。

在选定的范围内,预计第一行是字段(或节点)名称。值得注意的是,我们可以使用节点名称来定义它所属的级别。以节点分隔符 "/" 开头并分隔,节点名称比前一个节点深一级。例如,/data/field1 等同于 <data><field1>....</field1><data>/student/name/surname 等同于 <student><name><surname>.... </surname></name></student>

'
' rngData : The selected region on Excel sheet, with the first row as field name,
' and data rows below
'  For the field name, use the node delimiter "/" to build the hierarchy of data
'  e.g. /data/field1 is equivalent to <DATA><FIELD1>....</FIELD1><DATA>
'
' rootNodeName : The XML document root node tag name

Function GenerateXMLDOM(rngData As Range, rootNodeName As String)
...


Function fGenerateXML(rngData As Range, rootNodeName As String) As String
...

限制和说明

字段的顺序可能会影响生成的 XML,必须放置在同一子节点内的字段应彼此相邻放置。例如,如果 /student/id/student/name 彼此相邻放置,它将生成

<student><id>..</id><name>...</name></student> 

但是,如果不是,结果将是

<student><id>..</id></student> <somebrabra...> ... </somebrabra...>
<student><name>..</name></student> 

原因是它仅检查最后一个字段,而不是在决定应该创建节点的位置之前检查所有字段。

最后,我想感谢 Hasler Thomas,他是 A Filebrowser for VBA 的作者,他提供了文件浏览的代码。希望这段代码对您有所帮助。如果您发现任何错误,请告诉我。

历史

  • 2004 年 5 月 4 日 -- 发布 0.8 版本
© . All rights reserved.