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
下載