1. 程式人生 > >從VBA到VSTO的一些想法

從VBA到VSTO的一些想法

最近學習了李永富老師的《VSTO開發入門教程》,跟之前的VBA知識對比下,有很多感觸。

簡單比較

說說VBA

VBA是通過VB語言來操作OFFICE文件、程式以及其他軟體產品的技術,使軟體的使用者擴充套件性理論上無窮大。

Office中VBA需要啟用開發工具,即可錄製巨集,使用巨集,插入模組等,非常的方便,尤其是自定義函式,不需要任何其他操作,只需要關心函式本身的邏輯,使用者可以通過錄制巨集來學習任何操作的程式碼實現方法,極易成長。

但同時,VBE(就是office自帶的原生編輯器)真是上世紀九十年代既視感,習慣了IDEA這種強大的IDE的同學肯定感覺在記事本里面寫程式碼一樣。

聊聊VSTO

VSTO是一門新技術(相對於VBA)了,其實就是用.Net的形式來寫Office程式。

當然了.Net不僅僅支援VB,也支援C#,這意味著,你既可以用熟悉的VB來寫(忽略VB.NET和VBA細微的語法差異),也可以用更強大的C#來寫,相比較而言,可以用C#來實現更復雜的需求,比如多執行緒,比如面向物件(真正的面向物件,VB更像是面向過程,不過支援面型物件而已)。

中間操作遇到一個問題,即VBA的方法,函式,C#中不一定有,或者使用方法與場景不同,這就是.Net的長處了,.Net是一門技術,不是一門語言,你可以直接在C#中使用VB的庫,就像使用C#自己封裝的庫一樣(比Java的JNI方便的不要不要的)

但是,需要裝一個VS,具體版本取決於目標office程式,如我的office是2016,就需要裝一個VS2017版本,大學時就體驗過微軟的豪華,現在裝一次VS2017,真是有感觸,豪華永無止境啊,上來就是10G+。不過宇宙級IDE總是對得起它的空間的。

話說回來,一個簡單的文件操作,至於這麼大動干戈嗎?
生命在於折騰!

其他操作方式

其實除了微軟提倡和支援的VBA和VSTO兩個方式外。其他很多程式語言都可以直接操作Office文件。

因為Office文件本身就是一個xml檔案,xml本身又是一個文字文件,或者說,只要能讀寫檔案,處理字串的變成語言,理論上都支援操作Office文件。

操作office文件本質就是操作一個複雜的XML檔案,底層使用xml文件操作技術(如DOM,SAX)封裝一些常用方法,屬性,類庫,呈現出來一個框架或是技術,成為這個程式語言操作Office的利器。

現在操作Office文件生態較好的語言有,JavaScript、Java、Python。

生態最好的當然是C#了。為什麼有C#?它不是本身就支援嗎?,C#除了使用VSTO技術操作Office文件外,還可以直接通過控制檯或是Form或是Web專案using相關名稱空間,即可直接操作Office。

既然有這麼多語言可以支援,那為什麼要用VS,要用C#.Net呢?

  • 相容性
    微軟沒有開放Office的API介面,其他語言類庫是直接憑經驗解析,很可能有些老版本,或是特殊一點的檔案,又或者新檔案解析出錯,.Net原湯化原食。
  • 可擴充套件性
    從資料區到功能區,到各種操作窗格,使用者控制元件,真的是其他非MS系語言可以比擬的。
  • 學習成本
    使用者不需要整天去開著某個類庫的官方文件來學習,想知道某個操作如何用程式碼實現,直接錄製巨集,檢視巨集程式碼(VB),文件物件模型都是大致相同的,然後用C#的方式實現,遇到問題,F1檢視幫助。

工具推薦

VS可以直接使用最新版(現在是2017)的社群版本,免費且完全夠用。

習慣IDEA或是(其他JB系列產品)的,可以裝上ReShaper外掛,使用IDEA快捷鍵和編輯方式。

習慣eclipse也可裝上asEclipse,體驗visual studio for eclipser

比較結論

小需求用VBA

畢竟輕量

大需求用VSTO

強大

文件級別需要自定義函式儘量用VBA

VBA簡單,VSTO自定義函式過程太繁瑣

文件級別不需要自定義函式用VSTO

不自定義函式,C#寫起來就是比VB舒服(個人感覺)

外接程式界別用VSTO

這個不多說了,可以直接打包做成EXE給別人。

保證相容性優先,使用VBA

大家都是盜版,拿什麼保證客戶機裝了vsto for office