Office文档之秘密花园CustomXMLPart(2/2)

161 篇文章 16 订阅
2 篇文章 0 订阅

在Excel VBA开发的时候,有些参数需要保存下来,而不是Hard Code写在代码中,通常会在Excel工作簿中创建一个隐藏工作表用于保存这些参数,其优势是方便编辑和维护,不缺点是稍有Excel知识的很容易就能找到并修改这些参数。其实在Office文档中还有更隐秘的一个秘密花园,可以用于藏宝,接下来就以Excel文件为例来演示,Word和PowerPoint文档的使用方法类似。


Excel将XML保存在哪里了呢?如果只是保存在内存中,那么关闭Excel后,这些内容就注定会丢失的。其实XML被保存在Excel文件中,将文件名后缀改为ZIP,使用压缩软件打开,浏览定位到目录customXml,其中的item1.xml就是保存CustomXMLPart的文件。
在这里插入图片描述
使用文本编辑器打开item1.xml,如下图所示。
在这里插入图片描述
上一篇博客演示了对于相同的Tag,无法重复添加,如果需要修改XML中的值,该如何实现呢?一种方法是,先删除CustomXMLPart,然后再重新添加新的XML,另外一种方法是直接修改某个XML Node的值,这和操作普通的XML是完全类似。
示例代码如下:

Function blnUpdateCustomXMLPart(ByVal strTag As String, ByVal strVal As String) As Boolean
    Dim objXmlPart As CustomXMLPart
    blnUpdateCustomXMLPart = False
    For Each objXmlPart In ThisWorkbook.CustomXMLParts
        If Not objXmlPart.DocumentElement Is Nothing Then
            Dim A
            Set A = objXmlPart.SelectSingleNode("/*")
            If objXmlPart.SelectSingleNode("/*").BaseName = strTag Then
                objXmlPart.DocumentElement.Text = strVal
                blnUpdateCustomXMLPart = True
                Exit For
            End If
        End If
    Next
End Function

【代码解析】
函数的两个参数分别是:strTag指定XML Tag,strVal指定新的值。
第4~14行代码遍历CustomXMLPart。
第6行代码定位指定的XML Tag,注意需要使用BaseName属性。
第7行代码设置新的属性值。
第8行代码指定函数返回值、
第9行代码退出循环。

更新Demo过程代码如下。

Sub Demo()
    Dim objXmlPart As CustomXMLPart
    Dim strXML As String
    Dim strTag As String
    Dim strVal As String
    strTag = "FinancialYr"
    strXML = VBA.Replace("<TAG>FN19</TAG>", "TAG", strTag)
    Debug.Print strXML
    Call AddCustomXMLPart(strTag, strXML)
    MsgBox GetCustomXMLPart(strTag)
    strVal = "FN20"
    If blnUpdateCustomXMLPart(strTag, strVal) Then _
        MsgBox GetCustomXMLPart(strTag)
End Sub

【代码解析】
增加第11和12代码,更新成功后,查询指定Tag,结果如下所示:
在这里插入图片描述


CustomXMLPart的基本用法介绍就到这里,如果大家有更多的好思路,欢迎留言。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值