VSTO學習筆記(二)Excel對象模型

原文: VSTO學習筆記(二)Excel對象模型

上一次主要學習了VSTO的發展歷史及其歷代版本的新特性,概述了VSTO對開發人員的幫助和效率提高。從此次開始,將從VSTO 4.0開始,逐一探討VSTO開發中方方面面,本人接觸VSTO時間不長,也是一次嘗試。鑑於Excel在整個Office家族中的重要地位,故先從Excel開始介紹,後續內容會陸續介紹Word、PowerPoint、Outlook、InfoPath等。因爲VSTO 4.0創建在Office 2010基礎之上,先介紹一下Office 2010的新特性,注意如今只是Beta版,正式版可能還會有功能上的調整。 php

示例代碼下載html

本系列全部示例代碼均在 Visual Studio 2010 Beta 2 + Office 2010 Beta 下測試經過web

 

1、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: app

Office Word 2010 也增長了在線實時協做功能,用戶能夠從 Office Word Web App 中啓動 Word 2010 進行在線文檔的編輯,並可在左下角看到同時編輯的其餘用戶(包括其餘聯繫方式、IM 等信息,須要 Office Communicator)。而當其餘用戶修改了某處後,Word 2010 會提醒當前用戶進行同步。(注:此功能也存在於部分其餘 Office 2010 程序中) iphone

另外,用戶可在 Office Word 2010, Office PowerPoint 2010 以及 Office OneNote 2010 等 Office 2010 程序中直接插入其餘正在運行的軟件的截圖。 ide

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來體驗新特性。

 

2、Excel對象模型

對象模型是一組由Office應用程序提供的對象,用來控制Office應用程序,是VSTO開發的核心內容。其中Application是最頂層的對象,負責對Office進行總體的控制,相似於.Net WinForm和WPF中的Application對象,是根對象。Workbook(s)指工做簿,Worksheet(s)指工做表,Chart(s)指各類圖表。Sheets對象比較特別,它包含Worksheet或Chart類型的對象,而Range表示但願操做的單元格範圍。

 

3、主互調程序集(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。

 

4、Office解決方案

一、Office自動化程序(Office Automation Executable)

Office自動化程序是獨立於Office的程序,用於控制和自動化處理某個Office應用程序。如控制檯、類庫、WinForm、WPF等。

二、Office加載項(Add-In)

Office加載項是某個程序集(dll)中的類,Office在須要時可加載和建立它,加載項能夠直接在Office應用程序的進程中運行,而不須要在獨立於Office應用程序的進程中運行,加載項在Office應用程序的整個生命週期中均保持加載狀態。

三、Office文檔代碼(Code Behind on Office Document)

Office文檔代碼早在VBA時代就已經獲得了普遍的應用,在VSTO中獲得了進一步的加強。Office文檔代碼能夠用某種方式對Office應用程序進行定製,如增長只在當前文檔中才出現的菜單項,或者在文檔打開時觸發事件。

四、Office 模板(Office Template)

使用託管代碼建立相應的Office模板。

五、服務器文檔模式(Server Document)

VSTO能夠在不打開Office應用程序的狀況下,在服務器端運行程序並對存放在Office文檔中的數據進行操做,如VSTO的緩存數據功能,SharePoint 2007/ 2010的Excel Services等。

六、OpenXML模式

以OpenXML的API操做Office文檔中的數據,結合XSLT等轉換爲須要的文檔格式。關於OpenXML的介紹請參閱我博客的另一個系列:OpenXML學習筆記。

 

5、Office文檔代碼示例

因爲本次主要學習Excel對象模型,顧採用Office文檔代碼模式作幾個簡單的練習,其他模式後續篇章會陸續介紹。

一、新建一個Excel 2010 Workbook項目:

 

默認添加的引用和項目文件:

 

二、在Sheet1中添加兩個Button和一個Label控件:

 

三、添加事件處理代碼:

 

代碼
         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.

 

四、F5運行,將會打開生成的Excel:

 

五、運行結果:

 

6、小結

本次首先敘述了Office 2010的新特性,學習了VSTO開發的基礎知識,對PIA有了深入的認識,介紹了不一樣的Office解決方案的區別。最後用 Excel文檔代碼作了一個簡單的示例,利用C# 4.0的新特性,使得VSTO 4.0的開發更加便捷、高效。若是你還不熟悉C# 4.0,不妨先看看園子裏的相關文章,若要調試本示例代碼,須要安裝VS2010 Beta2 + Office 2010 Beta。下一次將繼續學習Excel的相關知識,咱們將使用VSTO來編寫一個Excel自定義公式,比較其與VBA的不一樣。

相關文章
相關標籤/搜索