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為這個數字就可以。
以上講過的所有工具,在我的博客園中均可下載到。下載網址大家自行搜索。