VBA中操作XML
OFFICE2007之后使用了OpenXml标准(伟大的改变),定制文本级的Ribbon可以通过修改压缩包内的xml文件来实现。
先学习一下VBA中操作XML的方法
先引用Microsoft XML V6.0,对应的文件是msxml6.dll。前期绑定,方便使用智能提示。
一、DOM方式创建一个XML文件:内容是自定义Ribbon的一个简单框架。文件保存在桌面。
Sub CreateXmlFile() '创建文档对象模型
Dim xmldoc As New DOMDocument '创建根节点,XML文档有且必须仅有一个根节点。
Dim root As IXMLDOMElement
'http://schemas.microsoft.com/office/2006/01/customui 2007版本使用的命名空间
'http://schemas.microsoft.com/office/2009/07/customui 2010版本使用的命名空间
Set root = xmldoc.createElement("customUI")
root.setAttribute "xmlns", "http://schemas.microsoft.com/office/2009/07/customui"
Set xmldoc.DocumentElement = root '指定根节点 'ribbon元素
Dim xmlribbon As IXMLDOMElement
Set xmlribbon = xmldoc.createElement("ribbon")
root.appendChild xmlribbon 'tabs元素
Dim xmltabs As IXMLDOMElement
Set xmltabs = xmldoc.createElement("tabs")
xmlribbon.appendChild xmltabs 'tab元素
Dim xmltab As IXMLDOMElement
Set xmltab = xmldoc.createElement("tab")
xmltab.setAttribute "id", "CustomTab"
xmltab.setAttribute "label", "自定义标签"
xmltabs.appendChild xmltab 'group元素
Dim xmlgroup As IXMLDOMElement
Set xmlgroup = xmldoc.createElement("group")
xmlgroup.setAttribute "id", "CustomGroup"
xmlgroup.setAttribute "label", "自定义分组"
xmltab.appendChild xmlgroup 'button元素,并设置button的属性
Dim xmlbutton As IXMLDOMElement
Set xmlbutton = xmldoc.createElement("button")
xmlbutton.setAttribute "id", "btn"
xmlbutton.setAttribute "label", "插入公司名称"
xmlbutton.setAttribute "size", "large"
xmlbutton.setAttribute "onAction", "InsertCompanyName"
xmlgroup.appendChild xmlbutton '文件保存到桌面
xmldoc.Save ("C:\Users\stone\Desktop\1.xml")
End Sub
下面是创建出来xml文件内容。创建出的文件标签不能自动换行。只好手工排版。
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon>
<tabs>
<tab id="CustomTab" label="自定义标签">
<group id="CustomGroup" label="自定义分组">
<button id="btn" label="插入公司名称" size="large" onAction="InsertCompanyName"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
二、对已有的XML文件添加新的元素:给group添加一个menu元素,menu元素下添加两个button子元素
Sub AppendXmlFile() Dim xmldoc As New DOMDocument Dim b As Boolean
'加载xml文件,成功返回true
b = xmldoc.Load("C:\Users\stone\Desktop\1.xml")
If Not b Then Exit Sub ' Dim xmlgroups As IXMLDOMNodeList
' Dim xmlgroup As IXMLDOMElement
' Set xmlgroups = xmldoc.getElementsByTagName("group") '所有的group元素,返回一个集合
' Set xmlgroup = xmlgroups(0) '取集合中第一个group元素 Dim xmlgroup As IXMLDOMNode
'Xpath 选取第一个group节点
Set xmlgroup = xmldoc.SelectSingleNode("//tab[@id='CustomTab']/group[0]") 'menu元素
'为了避免产生xmlns="",要添加的节点的namespaceURI需要和父节点一致。下同
Dim xmlmenu As IXMLDOMElement
Set xmlmenu = xmldoc.createNode(NODE_ELEMENT, "menu", xmlgroup.NamespaceURI)
xmlmenu.setAttribute "id", "CustomMenu"
xmlgroup.appendChild xmlmenu 'button元素
Dim xmlbutton1 As IXMLDOMElement
Set xmlbutton1 = xmldoc.createNode(NODE_ELEMENT, "button", xmlmenu.NamespaceURI)
xmlbutton1.setAttribute "id", "btn1"
xmlbutton1.setAttribute "label", "按钮一" Dim xmlbutton2 As IXMLDOMElement
Set xmlbutton2 = xmldoc.createNode(NODE_ELEMENT, "button", xmlmenu.NamespaceURI)
xmlbutton2.setAttribute "id", "btn2"
xmlbutton2.setAttribute "label", "按钮二" xmlmenu.appendChild xmlbutton1
xmlmenu.appendChild xmlbutton2 Debug.Print xmldoc.XML
xmldoc.Save ("C:\Users\stone\Desktop\1.xml") End Sub
下面是添加新节点后的XML文件内容
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon>
<tabs>
<tab id="CustomTab" label="自定义标签">
<group id="CustomGroup" label="自定义分组">
<button id="btn" label="插入公司名称" size="large" onAction="InsertCompanyName"/>
<menu id="CustomMenu">
<button id="btn1" label="按钮一"/>
<button id="btn2" label="按钮二"/>
</menu>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
一个小知识点:
创建子节点时,如果没有指名namespaceURI,在appendchild后,子节点带一个xmlns=""的属性。如果创建子节点时指定namespaceURI等于父节点的URI可以屏蔽这个麻烦,就不会生成xmlns=""了。
DOMDocument的两个方法:
Function selectNodes(queryString As String) As IXMLDOMNodeList
Function selectSingleNode(queryString As String) As IXMLDOMNode
queryString是一个Xpath表达式。
Xpath语法参考W3C网站:http://www.w3school.com.cn/xpath/xpath_syntax.asp
VBA中操作XML的更多相关文章
- VC++中操作XML(MFC、SDK)转
[转]VC++中操作XML(MFC.SDK) XML在Win32程序方面应该没有在Web方面应用得多,很多Win32程序也只是用XML来存存配置信息而已,而且没有足够的好处的话还不如用ini.VC++ ...
- 数据库中操作XML(openXML)
最近公司项目需要在数据库中操作XML,因此系统的学习了一下 一.openxml的格式 OPENXML( idoc int [ in] , XPathnvarchar [ in ] , [ flags ...
- C#.Net中操作XML方法一
我们知道XML是一种可标记性的语言,用来标记数据.定义数据类型,是一种执行用户对自己的标记语言进行定义的源语言.由于结构好.而且easy理解,就好比一棵树,层次关系分明,因此也经常把一些数据存储到XM ...
- 第12章 在.NET中操作XML
12.1 XML概述 12.1.1 为什么要有XML 12.1.2 XML文档结构 (1)文档声明 <?xml version="1.0"encoding="UTF ...
- [转]VC++中操作XML(MFC、SDK)
XML在Win32程序方面应该没有在Web方面应用得多,很多Win32程序也只是用XML来存存配置信息而已,而且没有足够的好处的话还不如用ini.VC++里操作XML有两个库可以用:MSXML和Xml ...
- 《SeleniumBasic 3.141.0.0 - 在VBA中操作浏览器》系列文章之一:SeleniumBasic的下载
Selenium是一种非常流行的浏览器和网页自动化技术,开发人员可以使用C#.Java.Python等语言来操作Chrome.Firefox等浏览器. VBA语言可以直接操作访问Microsoft I ...
- C#中操作xml文件(插入节点、修改、删除)
已知有一个xml文件(bookstore.xml)如下: <?xml version="1.0" encoding="gb2312"?> <b ...
- Flex中操作XML的E4X方法
用于处理 XML 的 E4X 方法 Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本 ECMAScript for XML 规范定义了一组用于使用 XML 数据的类 ...
- Android(java)学习笔记187:Android中操作XML数据(使用Pull解析器)
1. Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器 ...
随机推荐
- Eclipse安装插件支持jQuery智能提示
Eclipse安装插件支持jQuery智能提示 最近工作中用到jQuery插件,需要安装eclipse插件才能支持jQuery智能提示,在网上搜索了一下,常用的有三个插件支持jQuery的智能提示:1 ...
- 要心中有“数”——C语言初学者代码中的常见错误与瑕疵(8)
在 C语言初学者代码中的常见错误与瑕疵(7) 中,我给出的重构代码中存在BUG.这个BUG是在飞鸟_Asuka网友指出“是不是时间复杂度比较大”,并说他“第一眼看到我就想把它当成一个数学问题来做”之后 ...
- 统一使用GPT分区表,安装MAC 10.10 和 Win8.1 pro双系统
步骤一: 为Mac OS 分区,为其它分区留白1,使用OSX Mavericks制作的Mac安装U盘按住Option键启动:2,选择安装Mavericks盘符:3,进入OSX安装启动界面,选择磁盘工具 ...
- source insight技巧
(1)在Source Insight中能不能设置永久Bookmark 可以从macro方面入手 (2)source insight中添加.S文件 (3)source insight里面怎么能不让它每次 ...
- Backup: Array in Perl6
Array in Perl6 继承List,而List又继承Iterable,Positional,Cool ARRAY.pop ARRAY.shift ARRAY.push: VALUES ARRA ...
- bash环境变量读取顺序
bash环境变量读取顺序: 交互式登录的用户: /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bas ...
- Composer使用中常见的问题
安装了Composer后,运行 composer --version ,查看Composer的版本号.如果出现下面的提示,那么软件安装成功. Composer version 1.2.0 2016-0 ...
- JavaEE基础(九)
1.面向对象(多态的概述及其代码体现) A:多态(polymorphic)概述 事物存在的多种形态 B:多态前提 a:要有继承关系. b:要有方法重写. c:要有父类引用指向子类对象. C:案例演示 ...
- APP运营推广那点事【干货】
你的手机里面有多少应用?什么样的手机应用吸引你?下载之后经常用还是让他shi在那里?又或者刚点进去就卸载? 一款成功的应用,开发APP只是第一步,比前者更重要的是“养”APP,APP就像是一个需要不断 ...
- Oracle性能优化--AUTOTRACE 操作
AUTOTRACE是一个SQL*Plus工具,用于跟踪SQL的执行计划,收集执行时所耗用资源的统计信息,是SQL优化工具之一,下面给出启用 AUTOTRACE 功能步骤. 一 .启用AUTOTRACE ...