Word是一個大家平時辦公中最常用的文字處理軟件之一,其功能包羅萬象,十分強大。但不排除某些用戶有獨特而專有的需求,Word自帶的功能並沒有考慮到,要由用戶手動操作若幹步方能完成。這些操作有時存在複用的價值,那麼不妨把它們抽象並固定下來,變成Word裏的一項功能吧。
對於簡單的操作複用,我們可以通過內置的宏或VBA來實現。Word中甚至還提供了“錄製宏”的功能,來降低編寫代碼的門檻。不過宏和VBA有個缺點,即不能利用Ribbon欄。(有同學說過可以使用XML映射來實現,但我沒試過。)而開發一個加載項,或者說VSTO外接程序,就可以克服這個缺點。
今天,我們就來編寫一個簡單的VSTO外接程序,作為入門。
一、安裝Visual Studio 2017,並在安裝時確保選中Office/SharePoint這一選項。

二、打開VS2017,新建項目。分別選中Visual Basic→Office\SharePoint→Word 2013和2016 VSTO外接程序。(選擇VB是因為其語法與VBA的語法類似,學過VBA的同學可以馬上上手,當然選擇C#也是可以的。嚴格來說,此處的VB指的是VB.net,而VBA則基本繼承VB6.0,兩者的語法在某些地方還是有很大區別的。)為這個項目起個名字,比如WordAddInTest。

三、新建項目後,呈現在麵前的是ThisAddIn.vb裏的內容,我們稍後再來關注它。現在先來創造一個Ribbon界麵。通過解決方案資源管理器添加一個新項,類型則選擇“功能區(可視化編輯器)”,這樣我們就得到了一個新的帶有空組的Ribbon欄。
四、接下來,就是“搭積木”時間了。我們可以看到,在工具欄中出現了一些Ribbon控件,它們分別是Box、Button、ButtonGroup、CheckBox、DropDown、EditBox、Gallery、Group、Label、Menu、Separator、Tab、ToggleButton。

現在就對這些控件做一些簡單的介紹。
1.容器控件:Tab、Group、Box和ButtonGroup。
a.Tab是選項卡,如果你希望使用不止一個選項卡,你可以拖放一個新的Tab。
b.Group是選項組,通常一個選項卡由若幹個選項組組成。有時選項組右下角會標有一個灰色箭頭,單擊它能啟動一個窗體。這種窗體的啟動可以通過Group的DialogLauncher來實現。
c.Box(不可見)是用來排列具體的控件的,可以使控件橫向或者縱向排列,目的是使界麵井然有序。
d.ButtonGroup(不可見)則是專為排列按鈕而存在的,而且隻能是橫向排列。
2.不可操作控件:Label和Separator。
a.Label即標簽,是用來顯示提示性文本的。
b.Separator即分割線,它可以用來位於同一個選項組中而功能又有所區別的控件或控件組。
3.單一控件:Button、CheckBox、CombolBox、DropDown、EditBox和ToggleButton。
a.Button是最普通的按鈕,可以通過單擊它執行一些操作。
b.CheckBox是複選框,可以用它來打鉤。
c.CombolBox是組合框,可以用它來輸入文本或從下拉列表中選擇。
d.DropDown是下拉框,無法向它輸入文本,隻能從列表中選擇。
e.EditBox是編輯框,可以用它來輸入文本。
f.ToggleButton是類似開關的按鈕,按鈕在按下(呈現深色)時,是一種狀態;鬆開時(恢複淺色)又是一種狀態。
4.複合控件:Gallery、Menu和SplitButton。
這三個控件的作用比較相似,都是能生成下拉選項供用戶選擇。Gallery的特點是可以在下拉選項的一行中橫向排列項目,且本身不能被用作按鈕響應單擊事件;Menu本身也不能用作按鈕;而SplitButton則可以相應單擊事件。
我們來看一張這些控件的示意圖,就容易明白了。

五、做完界麵以後,就可以著手編寫代碼了,但在開發具體的功能前,我們要先寫一點必需的代碼,為後續的工作鋪路。
1.新建一個標準模塊,用來存放公共的數據。我們把這個模塊命名為mdlPublic。
定位到Module mdlPublic的下一行,聲明Application接口,為了簡便,就叫App吧。
Module mdlPublic
Public App As Word.Application
End Module
2.回到第三步中提及的ThisAddIn.vb文件中,定位到Private Sub ThisAddIn_Startup Handles Me.Startup的下一行,對接口App進行實例化。
Private Sub ThisAddIn_Startup Handles Me.Startup
App = Globals.ThisAddIn.Application
End Sub
這段代碼的意思是,在加載項啟動時(Word顯示啟動畫麵時,正是加載項啟動的時候),獲取當前運行的Word實例,並賦值給尚未實例化的接口App。這跟開發具體的功能有很大的關係,因為我們要通過這個接口來對Word文檔進行操作。
好了,路已經鋪好了,熟悉VBA的同學馬上就可以自己玩兒去了,隻要把VBA中的Application全部改成這裏的App就可以了。不過還是來看簡單的一個例子。
當我們從網頁等地方複製文本時,有時會伴隨著大量討厭的空行,下麵我們就通過代碼來去除這些空行。
1.在Ribbon欄上放置一個按鈕,更改名字為btnDeleteEmptyLine,標題為“刪除空行”。然後在設計界麵時雙擊它,進入代碼編輯模式。
2.為了編寫代碼的便利,在首行先引入一個命名空間。
Imports Microsoft.Office.Interop.Word
3.然後編寫如下代碼,以實現具體的功能:
Private Sub btnDeleteEmptyLine_Click(sender As Object, e As RibbonControlEventArgs) Handles btnDeleteEmptyLine.Click
If App.Selection.Start = App.Selection.End Then App.ActiveDocument.Select
With App.Selection.Find
.ClearFormatting
.Text = "^p^p"
.MatchWildcards = False
.Forward = True
.Replacement.ClearFormatting
.Replacement.Text = "^p"
.Execute(Replace:=WdReplace.wdReplaceAll)
End With
End Sub
3.單擊VS工具欄上的啟動按鈕,片刻後Word就啟動了,開始了調試過程。我們可以測試代碼是否按預期工作。
這個例子其實是調用了Word的查找替換功能來實現刪除空行的目的,用VBA也能完成。
那麼VSTO相較於VBA,其優越性體現在哪裏呢?我認為有以下幾個方麵:
1.VSTO可以用最新的VS以VB.net和C#等語言進行開發,而VBA基於老舊的VB6.0,不光是語法,連開發環境都幾乎照搬,代碼會寫得很不舒服。
2.VBA是存儲在文檔中的,沒有做到功能與文檔的分離;而VSTO可以做到。而Office移動版會拒絕打開帶有宏和VBA的文檔,給人帶來不便。
3.VSTO可以使用.net Framework提供的豐富的類庫,輕鬆地實現五花八門的功能,相對來說,用VBA實現就比較麻煩。
4.與VB6.0一樣,VBA對Unicode的支持不良,無法讀取以UTF-8、UTF-16等編碼的文本,隻支持以係統默認代碼頁(ANSI)編碼的文本;而VSTO根本沒有這種問題。
當然VBA相較於VSTO唯一的優點是輕便,由Office程序內置,而開發VSTO外接程序要安裝VS。而綜合來看,肯定是VSTO的潛力要優於VBA的。
好了,入門就到這裏了,大家自己玩去吧!
想看到更多這類內容?去APP商店搜,天天都有小歡喜。
相關資訊
最新熱門應用
歐意易交易所蘋果手機app
其它軟件397.1MB
下載
biki交易所app蘋果版
其它軟件64.78MB
下載
原子幣交易所安卓app
其它軟件223.89MB
下載
幣贏交易所app手機版安卓
其它軟件52.2 MB
下載
bitmart交易所官網app
其它軟件38.61MB
下載
比特交易所官網app
其它軟件57.63MB
下載
維克萊交易所app安卓
其它軟件81.97MB
下載
比特兒交易所app官網版安卓
其它軟件292.97MB
下載
mexc抹茶交易所app
其它軟件137MB
下載
熱幣交易所官方
其它軟件287.27 MB
下載