Microsoft Excel 2010自定义功能区:修改XML

发布于:2017-07-24 | 分类:process automation


手工创建自定义Excel选项卡的方法在可移植性方面存在不足,本文将以前文的hello_world.xlam为基础,记录将自定义功能区的菜单项集成到插件中去的基本步骤。

创建自定义功能区的xml文件

自定义功能区的选项卡、分组、菜单项可以使用xml格式文件的tabgroupbutton等标签来组织,其中常用的属性有:

  • label属性为显示的名称

  • onAction属性为相应的回调函数,例如btn1对应的函数为user_fun

  • imageMso属性控制菜单项的显示图标 1

以下是本文简单示例的xml结构:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
    <ribbon startFromScratch="false">
        <tabs>
            <tab id="userRibbon" label="自定义Ribbon选项卡">
                <group id="g1" label="自定义组一">
                    <button id="btn1" 
                        imageMso="Alerts" 
                        size="large" 
                        label="say hello world" 
                        onAction="user_fun"/>
                </group>

                <group id="g2" label="自定义组二">
                    <button id="btn2" 
                        imageMso="Help" 
                        size="large" 
                        label="About" 
                        onAction="about_fun"/>
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

关于自定义功能区的xml文件的具体说明,可以参考微软提供的文档 2 3 4 5

大致了解以上背景知识后,正式开始操作步骤:

  • 新建customUI文件夹,在该文件夹下新建CustomUI.xml文件,文件内容为以上示例xml代码。注意保存以UTF-8编码保存文件。

  • 以解压缩软件例如7-zip直接打开hello_world.xlam,然后将整个customUI文件夹拖入到压缩文件中并保存。

修改.res文件

接下来继续在以压缩包形式打开的hello_world.xlam文件上进行操作:

  • 右键压缩包中_res文件夹下的.res文件,在弹出菜单中选择编辑,以记事本方式打开.res文件。

  • .rels文件最后一个</Relationships>标签之前添加如下内容,保存并在提示更新压缩文件时选择确定。

<Relationship Id="customUIRelID" 
    Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" 
    Target="customUI/customUI.xml"/>

完成以上步骤后打开hello_world.xlam得到如下效果:

编辑VBA代码

xml中为say hello world指定的回调函数是user_fun,所以最后完成该子过程即可。新建模块(module)重命名为user_function,在其中写入以下代码:

Sub user_fun(Control As IRibbonControl)
    MsgBox "Hello world."
End Sub

特别注意,该过程需要带参数control As IRibbon

最后,本文示例文件hello_world_addin.xlam供参考。