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的更多相关文章

  1. VC++中操作XML(MFC、SDK)转

    [转]VC++中操作XML(MFC.SDK) XML在Win32程序方面应该没有在Web方面应用得多,很多Win32程序也只是用XML来存存配置信息而已,而且没有足够的好处的话还不如用ini.VC++ ...

  2. 数据库中操作XML(openXML)

    最近公司项目需要在数据库中操作XML,因此系统的学习了一下 一.openxml的格式 OPENXML( idoc int [ in] , XPathnvarchar [ in ] , [ flags ...

  3. C#.Net中操作XML方法一

    我们知道XML是一种可标记性的语言,用来标记数据.定义数据类型,是一种执行用户对自己的标记语言进行定义的源语言.由于结构好.而且easy理解,就好比一棵树,层次关系分明,因此也经常把一些数据存储到XM ...

  4. 第12章 在.NET中操作XML

    12.1 XML概述 12.1.1 为什么要有XML 12.1.2 XML文档结构 (1)文档声明 <?xml version="1.0"encoding="UTF ...

  5. [转]VC++中操作XML(MFC、SDK)

    XML在Win32程序方面应该没有在Web方面应用得多,很多Win32程序也只是用XML来存存配置信息而已,而且没有足够的好处的话还不如用ini.VC++里操作XML有两个库可以用:MSXML和Xml ...

  6. 《SeleniumBasic 3.141.0.0 - 在VBA中操作浏览器》系列文章之一:SeleniumBasic的下载

    Selenium是一种非常流行的浏览器和网页自动化技术,开发人员可以使用C#.Java.Python等语言来操作Chrome.Firefox等浏览器. VBA语言可以直接操作访问Microsoft I ...

  7. C#中操作xml文件(插入节点、修改、删除)

    已知有一个xml文件(bookstore.xml)如下: <?xml version="1.0" encoding="gb2312"?> <b ...

  8. Flex中操作XML的E4X方法

    用于处理 XML 的 E4X 方法 Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本   ECMAScript for XML 规范定义了一组用于使用 XML 数据的类 ...

  9. Android(java)学习笔记187:Android中操作XML数据(使用Pull解析器)

    1. Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器 ...

随机推荐

  1. php 下载保存文件保存到本地的两种方法

    第一种: 1 <? ?> 或 <?php //下载文件保存到本地//www.jbxue.comfunction downfile($fileurl){ob_start(); $fil ...

  2. 前端控制器DispatcherServlet 详解

    DispatcherServlet 是前端控制器设计模式的实现,提供 Spring Web MVC 的集中访问点,而且负责职责的分派,而且与 Spring IoC 容器无缝集成,从而可以获得 Spri ...

  3. 161207、高并发:java.util.concurrent.Semaphore实现字符串池及其常用方法介绍

    实现字符串池: StrPool.java import java.util.ArrayList; import java.util.List; import java.util.concurrent. ...

  4. Error -26612: HTTP Status-Code=500 (Internal Server Error) ...

    造成HTTP-500错误,有朋友告诉我如下几个可能: 1.运行的用户数过多,对服务器造成的压力过大,服务器无法响应,则报HTTP500错误.减小用户数或者场景持续时间,问题得到解决. 2.该做关联的地 ...

  5. oracle 11g升级

    手先需要下载oracle11g的补丁安装包,一般只有付费用户才能获取到该安装包,其他用户获取不到,那怎么办呢? 万能的互联网可以办到,可以用http://www.wangpansou.cn/所有其他用 ...

  6. 通过SQL Server Profiler来监视分析死锁

    在两个或多个SQL Server进程中,每一个进程锁定了其他进程试图锁定的资源,就会出现死锁,例如,进程process1对table1持有1个排它锁(X),同时process1对table2请求1个排 ...

  7. win10启动文件夹:

    win10启动文件夹: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

  8. struts2的两个核心配置文件

    struts2的两个核心配置文件,即:struts.default.xml和struts.properties A,位置:都在struts2-core-version.jar文件中 B,作用,stru ...

  9. 设置eclipse补全方法

    开MyEclipse 6.0. 1,然后“window”→“Preferences” 2,选择“java”,展开,“Editor”,选择“Content Assist”. 3,选择“Content A ...

  10. C/C++的一些备忘

    今天使用source insight阅读videoserver源码,有一些符号ctrl+左键点击显示找不到,先是rebuild工程和同步,没有效果,然后Options->Preferences- ...