zoukankan      html  css  js  c++  java
  • VBA中操作XML

    OFFICE2007之后使用了OpenXml标准(伟大的改变),定制文本级的Ribbon可以通过修改压缩包内的xml文件来实现。

        先学习一下VBA中操作XML的方法

        先引用Microsoft XML V6.0,对应的文件是msxml6.dll。前期绑定,方便使用智能提示。

        一、DOM方式创建一个XML文件:内容是自定义Ribbon的一个简单框架。文件保存在桌面。

     1 Sub CreateXmlFile()
     2 
     3    '创建文档对象模型
     4    Dim xmldoc As New DOMDocument
     5    
     6    '创建根节点,XML文档有且必须仅有一个根节点。
     7    Dim root As IXMLDOMElement
     8    'http://schemas.microsoft.com/office/2006/01/customui  2007版本使用的命名空间
     9    'http://schemas.microsoft.com/office/2009/07/customui  2010版本使用的命名空间
    10         Set root = xmldoc.createElement("customUI")
    11             root.setAttribute "xmlns", "http://schemas.microsoft.com/office/2009/07/customui"
    12         Set xmldoc.DocumentElement = root       '指定根节点
    13    
    14    'ribbon元素
    15    Dim xmlribbon As IXMLDOMElement
    16         Set xmlribbon = xmldoc.createElement("ribbon")
    17 root.appendChild xmlribbon 18 19 'tabs元素 20 Dim xmltabs As IXMLDOMElement 21 Set xmltabs = xmldoc.createElement("tabs") 22 xmlribbon.appendChild xmltabs 23 24 'tab元素 25 Dim xmltab As IXMLDOMElement 26 Set xmltab = xmldoc.createElement("tab") 27 xmltab.setAttribute "id", "CustomTab" 28 xmltab.setAttribute "label", "自定义标签" 29 xmltabs.appendChild xmltab 30 31 'group元素 32 Dim xmlgroup As IXMLDOMElement 33 Set xmlgroup = xmldoc.createElement("group") 34 xmlgroup.setAttribute "id", "CustomGroup" 35 xmlgroup.setAttribute "label", "自定义分组" 36 xmltab.appendChild xmlgroup 37 38 'button元素,并设置button的属性 39 Dim xmlbutton As IXMLDOMElement 40 Set xmlbutton = xmldoc.createElement("button") 41 xmlbutton.setAttribute "id", "btn" 42 xmlbutton.setAttribute "label", "插入公司名称" 43 xmlbutton.setAttribute "size", "large" 44 xmlbutton.setAttribute "onAction", "InsertCompanyName" 45 xmlgroup.appendChild xmlbutton 46 47 '文件保存到桌面 48 xmldoc.Save ("C:UsersstoneDesktop1.xml") 49 End Sub

     下面是创建出来xml文件内容。创建出的文件标签不能自动换行。只好手工排版。 

     1 <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
     2     <ribbon>
     3         <tabs>
     4             <tab id="CustomTab" label="自定义标签">
     5                 <group id="CustomGroup" label="自定义分组">
     6                     <button id="btn" label="插入公司名称" size="large" onAction="InsertCompanyName"/>
     7                 </group>
     8             </tab>
     9         </tabs>
    10     </ribbon>
    11 </customUI>

    二、对已有的XML文件添加新的元素:给group添加一个menu元素,menu元素下添加两个button子元素

     1 Sub AppendXmlFile()
     2 
     3     Dim xmldoc As New DOMDocument
     4     
     5     Dim b As Boolean
     6     '加载xml文件,成功返回true
     7     b = xmldoc.Load("C:UsersstoneDesktop1.xml")
     8     If Not b Then Exit Sub
     9 
    10 '    Dim xmlgroups As IXMLDOMNodeList
    11 '    Dim xmlgroup As IXMLDOMElement
    12 '    Set xmlgroups = xmldoc.getElementsByTagName("group")     '所有的group元素,返回一个集合
    13 '    Set xmlgroup = xmlgroups(0)                              '取集合中第一个group元素
    14      
    15     Dim xmlgroup As IXMLDOMNode
    16     'Xpath  选取第一个group节点
    17     Set xmlgroup = xmldoc.SelectSingleNode("//tab[@id='CustomTab']/group[0]")
    18                  
    19     'menu元素
    20     '为了避免产生xmlns="",要添加的节点的namespaceURI需要和父节点一致。下同
    21     Dim xmlmenu As IXMLDOMElement
    22     Set xmlmenu = xmldoc.createNode(NODE_ELEMENT, "menu", xmlgroup.NamespaceURI)
    23         xmlmenu.setAttribute "id", "CustomMenu"
    24         xmlgroup.appendChild xmlmenu
    25     
    26     'button元素
    27     Dim xmlbutton1 As IXMLDOMElement
    28     Set xmlbutton1 = xmldoc.createNode(NODE_ELEMENT, "button", xmlmenu.NamespaceURI)
    29         xmlbutton1.setAttribute "id", "btn1"
    30         xmlbutton1.setAttribute "label", "按钮一"
    31         
    32     Dim xmlbutton2 As IXMLDOMElement
    33     Set xmlbutton2 = xmldoc.createNode(NODE_ELEMENT, "button", xmlmenu.NamespaceURI)
    34         xmlbutton2.setAttribute "id", "btn2"
    35         xmlbutton2.setAttribute "label", "按钮二"
    36         
    37     xmlmenu.appendChild xmlbutton1
    38     xmlmenu.appendChild xmlbutton2
    39         
    40     Debug.Print xmldoc.XML
    41     xmldoc.Save ("C:UsersstoneDesktop1.xml")
    42     
    43 End Sub

    下面是添加新节点后的XML文件内容

     1 <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
     2     <ribbon>
     3         <tabs>
     4             <tab id="CustomTab" label="自定义标签">
     5                 <group id="CustomGroup" label="自定义分组">
     6                     <button id="btn" label="插入公司名称" size="large" onAction="InsertCompanyName"/>
     7                     <menu id="CustomMenu">
     8                         <button id="btn1" label="按钮一"/>
     9                         <button id="btn2" label="按钮二"/>
    10                     </menu>
    11                 </group>
    12             </tab>
    13         </tabs>
    14     </ribbon>
    15 </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

  • 相关阅读:
    手机号 验证(正则)
    静态库相关
    添加友盟SDK,实现新浪分享和微信朋友圈分享的关键代码
    删除Mac 系统中多出得MobileBackups 文件夹
    浏览器判断检测手机中是否安装了ios/android客户端程序
    浏览器判断是否安装了ios/android客户端程序
    自定义TextField的删除按钮
    应用崩溃日志解析
    关于UITextView的一些问题
    关于UIColor这个类的一些不知道的事
  • 原文地址:https://www.cnblogs.com/zzstone/p/5562543.html
Copyright © 2011-2022 走看看