VSTO学习笔记(二)Excel对象模型
上一次主要學習了VSTO的發展歷史及其歷代版本的新特性,概述了VSTO對開發人員的幫助和效率提升。從這次開始,將從VSTO 4.0開始,逐一探討VSTO開發中方方面面,本人接觸VSTO時間不長,也是一次嘗試。鑒于Excel在整個Office家族中的重要地位,故先從Excel開始介紹,后續內容會陸續介紹Word、PowerPoint、Outlook、InfoPath等。由于VSTO 4.0建立在Office 2010基礎之上,先介紹一下Office 2010的新特性,注意現在只是Beta版,正式版可能還會有功能上的調整。
示例代碼下載
本系列所有示例代碼均在 Visual Studio 2010 Beta 2 + Office 2010 Beta 下測試通過
?
一、Office 2010新特性
微軟將于2010年6月份正式推出Office 2010。Office 2010帶來了諸多程序改進,保持了Office 2007的XML文件格式,改進了Ribbon界面,并帶來了基于瀏覽器的Excel、Word、OneNote、PowerPoint作為Office網絡應用服務,并首次提供64位的Office。
Office 2010打破了微軟的傳統,成為全球最知名的在線Office工具,Office 2010中的基于Web的功能是全新的,因此可能會出現問題。由于對微軟全新的Office在線體驗持有懷疑的態度,雖然有些公司計劃購買Office 2010,但是同時也會使用免費的Google Docs和Zoho。
Office Word 2010
Office Word 2010 增強了 Navigation Pane 特性,用戶可在 Navigation Pane 中快速切換至任何一章節的開頭(根據標題樣式判斷),同時也可在輸入框中進行即時搜索,包含關鍵詞的章節標題會高亮顯示。例如下圖中的搜索 LiveSino.net:
Office Word 2010 也增加了在線實時協作功能,用戶可以從 Office Word Web App 中啟動 Word 2010 進行在線文檔的編輯,并可在左下角看到同時編輯的其他用戶(包括其他聯系方式、IM 等信息,需要 Office Communicator)。而當其他用戶修改了某處后,Word 2010 會提醒當前用戶進行同步。(注:此功能也存在于部分其他 Office 2010 程序中)
另外,用戶可在 Office Word 2010, Office PowerPoint 2010 以及 Office OneNote 2010 等 Office 2010 程序中直接插入其他正在運行的軟件的截圖。
Office Excel 2010
Office Excel 2010 新增了 Sparklines 特性,可根據用戶選擇的數據直接在單元格內畫出折線圖、柱狀圖等,并配有 Sparklines 設計面板供自定義樣式。
Office PowerPoint 2010
Office PowerPoint 2010 除了新增更多幻燈片切換特效、圖片處理特效之外,還增加了更多視頻功能,用戶可直接在 PowerPoint 2010 中設定(調節)開始和終止時間剪輯視頻(見下圖),也可將視頻嵌入之 PowerPoint 文件中。
PowerPoint 2010 左側的幻燈片面板也新增了分區特性,用戶可將幻燈片分區歸類,也可對整個區內的所有幻燈片進行操作。見下圖中的 Default Section 和 LiveSino Section。
PowerPoint 2010 也增加了類似格式刷的工具 – Animation Painter,可將動畫效果應用至其他對象,用法同格式刷。另外就是上次我提到的 Broadcast Slide Show 在線幻燈片播放功能。
Office 2010 其他組件包括 OneNote 2010, Access 2010, InfoPath 2010, Publisher 2010 都包含了不少新特性,并且都已采用 Ribbon UI 但我不打算詳細介紹。
Office Web Applications 2010
Office Web Applications 2010 包含 Word Web App, Excel Web App, PowerPoint Web App 以及 OneNote Web App,支持簡單的編輯及實時協作功能,支持 IE, Firefox, 和 Safari。具體內容后文中介紹,另附清晰截圖如下:
?
Office Mobile 2010
Office Mobile 2010 包含新版 Word Mobile, Excel Mobile, PowerPoint Mobile, OneNote Mobile 以及支持對話模式的 Outlook Mobile(見下圖,來源:SuperSite)。
企業服務器端也可渲染 Office 文檔供企業移動用戶通過手機端查看 Office 文檔,也支持黑莓和 iPhone。
WZor.net 泄漏了 Microsoft Office 2010 Professional Plus 技術預覽版(x86, x64),而 Ars Technica 在第一時間發布了全套 Office 2010 截圖。盡管對比 1 個月前泄漏的 Outlook 2010 截圖,界面并沒有太大改動,但最近的 TechED 09 以及該泄漏版 Office 2010 中暗示了些 Office 2010 的新特性。
Windows 7 Jump Lists
在 TechEd 2009 上,微軟演示了支持 Windows 7 Jump Lists 新特性的 Outlook 2010。當有未讀郵件時。Outlook 任務欄圖標右下角還包括新郵件的圖標提示(如下圖)。(via Techradar)
Microsoft PowerPoint Live(Broadcast Slide Show)
PowerPoint 2010 支持將演示文檔發布至 PowerPoint Live 或其他在線服務,以便其他用戶可通過瀏覽器觀看該演示文檔,類似 Apple iWork.com。而 PowerPoint Live 很可能就是 Office Web Applications 中的一員。
JCXP 還給出了一些 PowerPoint 2010 以及 Word 2010 新特性的截圖和簡介,比如:PowerPoint 截圖功能、新的 PowerPoint 過渡效果、PowerPoint 內錄制幻燈演示。
另外,Office 2010 官方團隊也已確認:Groove 已改名為 SharePoint Workspace,并且 OneNote 和 SharePoint Workspace 都將包括于 Pro Plus 版本中。
我已經安裝了Office 2010 Professional Plus Beta X64:
如上文介紹的,InfoPath和Groove的命名發生了變化,其他不變。個人感覺Office 2010中最大的變化是對在線辦公的支持,這是未來發展的趨勢,個人表示看好。其他新功能我會陸續嘗試,會發布在后續篇章,以VSTO 4.0來體驗新特性。
?
二、Excel對象模型
對象模型是一組由Office應用程序提供的對象,用來控制Office應用程序,是VSTO開發的核心內容。其中Application是最頂層的對象,負責對Office進行整體的控制,類似于.Net WinForm和WPF中的Application對象,是根對象。Workbook(s)指工作簿,Worksheet(s)指工作表,Chart(s)指各種圖表。Sheets對象比較特別,它包含Worksheet或Chart類型的對象,而Range表示希望操作的單元格范圍。
?
三、主互調程序集(PIA)
用于與Office交互的托管程序集叫做Office主互調程序集(PIA)。
PIA = Primary Interop Assemblies
通常應用一種被稱為COM Interop的.Net技術與Office對象模型進行交互,所有的Office對象都是用非托管代碼(C、C++)編寫的,并提供COM接口。為了在托管代碼中與這些接口進行通信,必須使用封裝器,通過封裝器來實現托管代碼與Office非托管COM接口之間的協同工作。該封裝器是一系列的.Net類,他們被編譯為PIA程序集。之所以PIA稱之為"主",是因為開發人員可以開發自己的封裝器IA(Interop Assemblies),除非有非常特殊的需求,否則不建議使用自己的IA,因為這不能夠與其他的Office解決方案進行交互,而且有可能包含Office已經修復的bug。
安裝相應的Office版本后就會安裝PIA了,如果要開發VSTO 4.0,建議安裝Office 2010 Professional Plus Beta。Office PIA被安裝到GAC(GAC = Global Assembly Cache)中。
大部分VSTO項目會自動添加PIA,如果創建的是其他類型的項目(控制臺、類庫、WinForm、WPF等),則需要手動添加PIA。
| 說明 | 程序集名稱 | 命名空間 |
| Microsoft Office 14.0 Object Library | Office.dll | Microsoft.Office.Core |
| Microsoft Excel 14.0 Object Library | Microsoft.Office.Interop.Excel.dll | Microsoft.Office.Interop.Excel |
| Microsoft Word 14.0 Object Library | Microsoft.Office.Interop. Word.dll | Microsoft.Office.Interop. Word |
| Microsoft Outlook 14.0 Object Library | Microsoft.Office.Interop. Outlook.dll | Microsoft.Office.Interop. Outlook |
| Microsoft Graph 14.0 Object Library | Microsoft.Office.Interop. Graph.dll | Microsoft.Office.Interop. Graph |
| Microsoft.SmartTags 2.0 Type Library | Microsoft.Office.Interop.SmartTag.dll | Microsoft.Office.Interop.SmartTag |
當PIA之間有依賴關系時,VS2010會自動添加必須的PIA。
?
四、Office解決方案
1、Office自動化程序(Office Automation Executable)
Office自動化程序是獨立于Office的程序,用于控制和自動化處理某個Office應用程序。如控制臺、類庫、WinForm、WPF等。
2、Office加載項(Add-In)
Office加載項是某個程序集(dll)中的類,Office在需要時可加載和創建它,加載項可以直接在Office應用程序的進程中運行,而不需要在獨立于Office應用程序的進程中運行,加載項在Office應用程序的整個生命周期中均保持加載狀態。
3、Office文檔代碼(Code Behind on Office Document)
Office文檔代碼早在VBA時代就已經得到了廣泛的應用,在VSTO中得到了進一步的增強。Office文檔代碼可以用某種方式對Office應用程序進行定制,如增加只在當前文檔中才出現的菜單項,或者在文檔打開時觸發事件。
4、Office 模板(Office Template)
使用托管代碼創建相應的Office模板。
5、服務器文檔模式(Server Document)
VSTO可以在不打開Office應用程序的情況下,在服務器端運行程序并對存放在Office文檔中的數據進行操作,如VSTO的緩存數據功能,SharePoint 2007/ 2010的Excel Services等。
6、OpenXML模式
以OpenXML的API操作Office文檔中的數據,結合XSLT等轉換為需要的文檔格式。關于OpenXML的介紹請參閱我博客的另外一個系列:OpenXML學習筆記。
?
五、Office文檔代碼示例
由于本次主要學習Excel對象模型,顧采用Office文檔代碼模式做幾個簡單的練習,其余模式后續篇章會陸續介紹。
1、新建一個Excel 2010 Workbook項目:
?
默認添加的引用和項目文件:
?
2、在Sheet1中添加兩個Button和一個Label控件:
?
3、添加事件處理代碼:
?
代碼 ????????private?void?btnPIA_Click(object?sender,?EventArgs?e)????????{
????????????Excel.Workbook?book?=?this.Application.Workbooks[1];
????????????Excel.Worksheet?sheet?=?book.Worksheets[1];//C#?4.0新特性,PIA動態導入。
????????????this.labMsg.Text?=?"這是PIA調用結果,當前工作表名為:?"?+?sheet.Name;
????????}
????????private?void?btn獲取工作表_Click(object?sender,?EventArgs?e)
????????{
????????????this.labMsg.Text?=?string.Empty;
????????????Excel.Workbook?book?=?this.Application.Workbooks[1];
????????????for?(int?i?=?1;?i?<=?book.Worksheets.Count;?i++)
????????????{
????????????????//C#?4.0新特性,PIA動態編譯。
????????????????this.labMsg.Text?+=?book.Worksheets[i].Name?+?"?";
????????????}
????????}
受益于C# 4.0的新特性,可以不用進行顯示類型轉換了,同時PIA將在運行時進行導入、編譯,注意:VSTO中的索引大多數是從1開始,而不是從0.
?
4、F5運行,將會打開生成的Excel:
?
5、運行結果:
?
六、小結
本次首先敘述了Office 2010的新特性,學習了VSTO開發的基礎知識,對PIA有了深刻的認識,介紹了不同的Office解決方案的區別。最后用?Excel文檔代碼做了一個簡單的示例,利用C# 4.0的新特性,使得VSTO 4.0的開發更加便捷、高效。如果你還不熟悉C# 4.0,不妨先看看園子里的相關文章,若要調試本示例代碼,需要安裝VS2010 Beta2 + Office 2010 Beta。下一次將繼續學習Excel的相關知識,我們將使用VSTO來編寫一個Excel自定義公式,比較其與VBA的不同。
總結
以上是生活随笔為你收集整理的VSTO学习笔记(二)Excel对象模型的全部內容,希望文章能夠幫你解決所遇到的問題。