Office开发需要的辅助工具
Office开发主要包括两个层面:功能开发和界面开发。
- 功能开发,指的是开发的产品能够解决哪些问题,其他人使用了你的工具改善了哪些方面。
- 界面开发,指的是产品与用户交互的方式,或者说产品呈现在Office窗口中的哪个场所。
一般来说,一个成熟完善的Office插件、工具在开发的过程中,都要考虑以上两个方面。
本帖和大家分享一下Office界面开发方面的话题。
Office编程开发,允许开发人员植入的元素主要有:
- customUI(自定义功能区、Office菜单、右键菜单等)
- CustomTaskpane(自定义任务窗格)
- Commandbar和CommandbarControl(自定义工具栏、控件等)
除了以上3种,还可以使用窗体和控件,这里所说的窗体指的是开发语言中的窗体,例如用VB.Net开发的插件,那就可以加入VB.Net的窗体和控件。
其中,customUI和CustomTaskpane用于Office 2007以上版本,实际效果如下图:
Commandbar和CommandbarControls可用于所有Office版本。此外,还用于VBA和VB6编程环境外接程序的开发中,因为VBA编程环境一直是工具栏/控件方式。
实际效果如下图:
然而,这些定制技术都有一定的理论基础,customUI和Commandbar方面的知识体系非常庞大,需要长期研究学习才能掌握和理解。
CustomTaskpane的实现过程最为简单,也没什么太复杂的变化代码。
以上这些重要技术的原理和具体实现过程,大家可以看我写过的书、发布的视频课程、帖子等。
为了方便更多人学习,下面分享Office界面开发相关的重要工具。
customUI方面的工具
customUI是通过XML代码实现,例如下面的XML将会在Excel的 开始选项卡的 字体组左侧出现一个自定义组。
1 <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
2 <ribbon startFromScratch="false">
3 <tabs>
4 <tab idMso="TabHome" label="Ribbon XML Editor">
5 <group id="Group1" label="测试" insertBeforeMso="GroupFont" >
6 <button id="Button1" label="蜘蛛网
" imageMso="ChartTypeOtherInsertGallery" onAction="Button1_Click" size="large" />
7 </group>
8 </tab>
9 </tabs>
10 </ribbon>
11 </customUI>
效果如下:
上述附件的下载地址:
看了上面的效果,大家一定有如下疑问:
- XML代码是怎么写出来的?
- TabHome、GroupFont是哪儿来的?
- ChartTypeOtherInsertGallery从哪儿来的?
- Button1_Click起什么作用?
下面一一解释。
1. XML代码是微软规定好的语法格式,设计不同场所的Office界面,写法也有所不同。
Ribbon XML Editor软件提供 快速访问工具栏、常用功能区等5个常用场所的XML模板。用户在此基础上稍作修改即可。
该软件还提供自动把XML压入Office文档、自动提取Office文档中的XML代码等功能。
2. TabHome和GroupFont是Office的内置ID,叫做idMso。
OfficeidMsoViewer软件提供Access/Excel/PowerPoint/Word的所有内置idMso查询,支持中文、英文、日文Office 2013。
点击任何一个节点,直接给出该节点对应的XML代码。
3. ChartTypeOtherInsertGallery是Office的一个内置图标,叫做imageMso。
imageMso7345可以查询微软提供的7345个内置Office图标,下载这个工作簿,点击任何一个图标会给出该图标对应的imageMso字符串。
4. Button1_Click是按钮控件的回调函数名称,用来响应VBA中的过程。
Ribbon XML Editor软件可以根据XML生成 VBA、VB6/VB.Net/C#语言的回调函数。
Commandbar方面的工具
在Excel 2003中,运行如下一段VBA代码,会在单元格右键添加一个“蜘蛛网”的自定义按钮。
1 Sub AddControl() 2 Dim cmb As CommandBar, ct As CommandBarButton 3 Set cmb = Application.CommandBars("Cell") 4 Set ct = cmb.Controls.Add(Type:=msoControlButton, before:=1) 5 With ct 6 .BeginGroup = False 7 .Caption = "蜘蛛网(&Z)" 8 .Enabled = True 9 .FaceId = 484 10 .Style = msoButtonIconAndCaption 11 .OnAction = "ct_Click" 12 .TooltipText = "提示语" 13 .BeginGroup = False 14 .Visible = True 15 End With 16 End Sub 17 Sub ct_Click() 18 ActiveCell.Value = Application.CommandBars.ActionControl.Caption 19 End Sub
实际效果如下图:
看到这个效果,一般会产生如下疑问:
Application.CommandBars("Cell")这个代码的Cell代表什么意思?
FaceId = 484,这个数字起什么作用?
回答如下:
Cell是Excel的一个内置工具栏的名称,CommandBars("Cell")表示单元格的右键菜单,右键菜单也属于工具栏的一个类型。
查询所有内置工具栏的工具有:
OfficeCommandbarViewer:该工具可以查看常用Office组件的所有内置工具栏和内置控件信息。
OfficeCommandbarDesigner:可以从该软件中直接操作和控制Office的所有工具栏,可以查看工具栏和控件信息,也可以编辑。
使用以上工具,就可以轻松地知道每个工具栏的名称叫什么了,从而在正确的场所设计自己的工具。
对于工具栏中控件的图标,微软采用FaceID来规定,每个数字代表一个内置图标。
FaceIDViewer采用Excel工作簿制作的图标查看工具。
每个图标下面有一个数字,在代码中设置FaceID为这个数字就可以。
以上讲过的所有工具,在我的博客园中均可下载到。下载网址大家自行搜索。