當前位置:
首頁 > 科技 > IT之家學院:用微軟VS2017為Word開發載入項——入門教程

IT之家學院:用微軟VS2017為Word開發載入項——入門教程

Word是一個大家平時辦公中最常用的文字處理軟體之一,其功能包羅萬象,十分強大。但不排除某些用戶有獨特而專有的需求,Word自帶的功能並沒有考慮到,要由用戶手動操作若干步方能完成。這些操作有時存在復用的價值,那麼不妨把它們抽象並固定下來,變成Word里的一項功能吧。

對於簡單的操作復用,我們可以通過內置的宏或VBA來實現。Word中甚至還提供了「錄製宏」的功能,來降低編寫代碼的門檻。不過宏和VBA有個缺點,即不能利用Ribbon欄。(有同學說過可以使用XML映射來實現,但我沒試過。)而開發一個載入項,或者說VSTO外接程序,就可以克服這個缺點。

今天,我們就來編寫一個簡單的VSTO外接程序,作為入門。

一、安裝Visual Studio 2017,並在安裝時確保選中Office/SharePoint這一選項。

IT之家學院:用微軟VS2017為Word開發載入項——入門教程

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

IT之家學院:用微軟VS2017為Word開發載入項——入門教程

三、新建項目後,呈現在面前的是ThisAddIn.vb里的內容,我們稍後再來關注它。現在先來創造一個Ribbon界面。通過解決方案資源管理器添加一個新項,類型則選擇「功能區(可視化編輯器)」,這樣我們就得到了一個新的帶有空組的Ribbon欄。

四、接下來,就是「搭積木」時間了。我們可以看到,在工具欄中出現了一些Ribbon控制項,它們分別是Box、Button、ButtonGroup、CheckBox、DropDown、EditBox、Gallery、Group、Label、Menu、Separator、Tab、ToggleButton。

IT之家學院:用微軟VS2017為Word開發載入項——入門教程

現在就對這些控制項做一些簡單的介紹。

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則可以相應單擊事件。

我們來看一張這些控制項的示意圖,就容易明白了。

IT之家學院:用微軟VS2017為Word開發載入項——入門教程

五、做完界面以後,就可以著手編寫代碼了,但在開發具體的功能前,我們要先寫一點必需的代碼,為後續的工作鋪路。

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商店搜IT之家,天天都有小歡喜。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT之家 的精彩文章:

又一里程碑:WhatsApp日活躍用戶量超10億
迅雷對第三方關閉遠程下載功能:不過小米路由器例外
游啊游,這款鰻魚機器人專用監測水質
騰訊雲伺服器CVM新購促銷活動,+15元送域名

TAG:IT之家 |

您可能感興趣

微軟發布.NET Core 3.0預覽版,加速應用程序載入
iPhone 5S上運行iOS 12測試版:Safari載入提速3.5秒
EF Core 2.1路線圖:視圖、GROUP BY和惰性載入
蘋果iPhone 5s運行iOS 12測試版:Safari載入提速3.5秒
應用載入測試:3G內存的iPhone XR小勝8G內存三星Note 9
360 N7 Pro配置曝光:載入驍龍710處理器,配備6GB LPDDR4X內存
30s對比:OPPO R15夢鏡版系統更新至ColorOS 6後載入王者榮耀有多快?
Python3.7中一種懶載入的方式
Webpack 4.0.0 正式發布,模塊載入打包工具
Lumia手機載入ARM版Win10:觸屏已經可以使用
下一代Playstation對比PS4 pro 載入時間省90%
你的 Vans Sk8-Hi 正在載入中……
PCIe 4.0 SSD遊戲載入測試:速度並無提升
提速20倍!3個細節優化Tableau工作簿載入過程
Windows 10 Mail更新:可載入外部伺服器上的圖片
Spring解密-Bean 載入流程
Google正在為Gmail增加快速載入的AMP技術
19年1月9日,將會載入史冊,AMD雙7nm顯卡與CPU發布
論APP載入速度,看小米8如何零封vivo X23
Firefox 將屏蔽 FTP 資源的載入