版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、VSTO之旅系列(二):創(chuàng)建Excel解決方案2013-02-24 18:00:150本專題概要· 引言· 創(chuàng)建VSTO項目· Excel對象模型· 創(chuàng)建Excel外接程序· 創(chuàng)建Excel文檔級自定義項· 小結(jié)一、引言也許很多朋友都沒有聽說過VSTO這個東西的,本人之前也同樣也不知道的,但是由于工作的原因接觸了這方面,由于VSTO方面國內(nèi)的資料比較少,本人剛開始學(xué)習(xí)的時候都是參考MSDN的,但是上面很多資料都是英文的,可能學(xué)習(xí)起來會比較慢點,所以本人把最近一段時間學(xué)習(xí)的內(nèi)容記錄下來,一來是作為一個鞏固的學(xué)習(xí)筆記,二來希望這些博客可以
2、幫助一些剛接觸VSTO的朋友可以有所借鑒。講了這么多廢話(指的上面一些過渡的話),到底VSTO到底是什么呢?這里我簡單的概括下的VSTO是微軟推出一種對Office產(chǎn)品進(jìn)行操作的技術(shù),其中提供了一些類庫來讓開發(fā)人員可以更方便地開發(fā)出Office的解決方案,即對Word/Excel/Outlook實現(xiàn)一些擴(kuò)展功能。 對于VSTO的更多介紹大家可以參看該系列的第一篇博文。在這個專題將為大家介紹下,如何創(chuàng)建Excel的解決方案?二、創(chuàng)建VSTO項目對于剛接觸VSTO的朋友來說,可能根本就不知道如何去創(chuàng)建一個VSTO的項目的,相信通過這個部分大家就會覺得是如此的簡單。環(huán)境的搭建進(jìn)
3、行VSTO開發(fā)的環(huán)境搭建是相當(dāng)簡單的,只需要安裝Visual Studio 2010(當(dāng)然安裝VS2010的時候在安裝組件中必須勾選VSTO選擇,這個選項是默認(rèn)勾上的。大家可以在安裝VS的時候留意下)和Office 2010就可以,當(dāng)然VS2008 和Office 2007的安裝也可以完成環(huán)境的搭建。創(chuàng)建第一個Excel工程來開始我們的VSTO之旅第一步, 選擇新建項目->Visual C#->Office->2010,然后選擇Excel 2010外接程序(如何是英文版即Excel 2010 Add-in),如下圖:從圖中可以看到,除了外接程序外,還有Excel模板和Exce
4、l文檔這兩種項目類型,他們的區(qū)別是 外接程序是應(yīng)用程序級別的,即如果你創(chuàng)建了Excel 2010外接程序,該程序?qū)λ蠩xcel應(yīng)用都是有效的,因為每次Excel的啟動過程都會加載該插件(即該程序),大家肯定留意到當(dāng)我們啟動Excel或Word的時候都會加載一些加載項,其實這些加載項就是屬于外接程序,即插件,啟動過程見下面圖:而 文檔和模板項目,都是屬于文檔級別的程序,該程序只對當(dāng)前文檔和模板有效,創(chuàng)建這兩種類型的項目,會在項目的工程目錄下會生成一個word文件(文檔項目會生成一個 Document1.docx文件,模板項目會生成一個Document1.dotx文件)。創(chuàng)建成功之后,外接程序的
5、項目文件結(jié)構(gòu)見下圖:從圖中可以看出,剛創(chuàng)建的VSTO外接程序都只有一個ThisAddIn.cs文件,該文件即是一個宿主項(更多關(guān)于宿主項和宿主控件的內(nèi)容可以查看該系列的第一篇博文),我們可以通過這個文件來對Excel對象進(jìn)行訪問。同時該類中有ThisAddIn_Startup和ThisAddIn_Shutdown兩個方法,從兩個方法中命名中可以知道,如果你的代碼想在加載外接程序時運行的話,就放把代碼放在ThisAddIn_Startup方法內(nèi)容,如果你想在外接程序卸載的時候運行你的代碼,就把這些代碼放在ThisAddIn_Shutdown方法內(nèi)。三、Excel對象模型 要開發(fā)Exce
6、l的項目,就自然少不了對Excel對象模型的了解了,只有了解Excel對象模型,這樣才能更好地對Excel進(jìn)行處理。下面先給出一張Excel對象模型的圖: 下面就具體對上圖中的各個對象做一個簡單的介紹:Worksheets對象代表Worksheet對象的集合,而Worksheet代表的就是Excel中的表,下面的代碼可以獲得Worksheet對象:Globals.ThisAddIn.Application.ThisWorkbook.ActiveSheet (激活的表,每次打開一個Excel文件,都是表一即sheet1被激活,所以通過該代碼就說獲得表一對象)Range對象代表一個范圍,
7、是操作Excel文檔最常用的對象,它可以表示為一個單元格、一行、一列或多個單元格塊(可以連續(xù),也可以不連續(xù))的單元格選定范圍,甚至多個工作表中的一組單元格??赡苌厦娴慕忉屵^于枯燥,相信大家通過下圖可以更好地理解Excel中的各個對象:四、創(chuàng)建Excel外接程序介紹完了Excel對象模型之后,我們就可以利用這些對象來對Excel文檔進(jìn)行操作了,下面就創(chuàng)建一個簡單的Excel外接程序的。首先我們模擬一個需求,大多說軟件在使用時都會彈出一個歡迎界面,這樣我們就創(chuàng)建一個外接程序,每次打開Excel文件時彈出一個歡迎界面,退出時彈出“謝謝使用”界面。 我們只需要在上面的創(chuàng)建工程中介入下面的代碼
8、即可:using System.Windows.Forms;namespace MyExcelAddIn1 public partial class ThisAddIn private void ThisAddIn_Startup(object sender, System.EventArgs e) / 因為歡迎使用窗口要在打開Excel的時候彈出,所以把下面代碼放在Startup方法內(nèi) MessageBox.Show("歡迎使用Microsoft Excel"); private void ThisAddIn_Shutdown(object sender, System.
9、EventArgs e) / 在退出Excel的時候彈出謝謝使用窗口,所以把下面的代碼放在Shutdown方法內(nèi) MessageBox.Show("謝謝使用!"); #region VSTO generated code / <summary> / Required method for Designer support - do not modify / the contents of this method with the code editor. / </summary> private void InternalStartup() this
10、.Startup += new System.EventHandler(ThisAddIn_Startup); this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown); #endregion 這樣,我們就完成了上面簡單的一個模擬需求了,下面讓我們按F5來測試下效果吧!按F5運行該程序時,首先打開一個Excel之后,一個歡迎界面就會彈出:點擊Excel窗口上的"X"按鈕時,就會彈出一個 “謝謝使用!”的窗口,效果如下:點擊 Ok 按鈕之后才會正常退出Excel。這樣就完成了一個簡單的Excel外接程序了,上面提
11、到過外接程序是應(yīng)用程序級別的,所以當(dāng)你每次打開Excel的時候都會有這樣的一個歡迎界面和關(guān)閉Excel時都有一個"謝謝使用"窗口,有些朋友想問了,如果我想卸載這個插件怎么辦呢?方法很簡單,只需要右鍵你的解決方案>清理,這樣可以了,另外你也可以從開發(fā)工具選項卡>COM 插件,在彈出的窗口中選擇你自定義的插件 再按下移除按鈕。具體步驟見下圖:五、創(chuàng)建Excel文檔級自定義項介紹完了創(chuàng)建Excel外接程序之后,下面看看如何創(chuàng)建一個文檔級的項目:1. 新建一個Excel 2010 Workbook(即Excel工作簿)項目:2. 單擊 OK按鈕,在下面的窗口中單擊 ”O(jiān)
12、K“按鈕:3. 在第一創(chuàng)建Excel工作簿項目是會彈出下面的一個窗口(窗口意思為:是否允許創(chuàng)建的項目訪問VBA項目系統(tǒng)),此時我們只需要點擊“Ok”就完成了Excel工作簿項目的創(chuàng)建。 現(xiàn)在我們來模擬一個需求,比如現(xiàn)在有一個成績單工作表,我們希望獲得各科目不及格同學(xué)的名字。此時我們只需要在上面創(chuàng)建的工作簿項目中添加一個ComboBox,一個Button,一個textbox。在button的Click事件中添加下面的代碼: / 找出各科目不及格同學(xué)的名字 private void btnSearch_Click(object sender, EventArgs e) / 清除textb
13、ox中的內(nèi)容 txtResult.Clear(); / 從復(fù)選框中獲得選擇的科目索引 int subjectIndex = cbxsubjects.SelectedIndex; if (subjectIndex = -1) MessageBox.Show("請先選擇一個科目"); return; / 獲得選擇的科目名稱 string subjectName = cbxsubjects.SelectedItem.ToString(); / 獲得工作表對象 Excel.Worksheet worksheet =(Excel.Worksheet)Globals.ThisWorkb
14、ook.ActiveSheet; for (int row = 2; row < worksheet.UsedRange.Rows.Count+1; row+) Excel.Range rng =(Excel.Range)worksheet.Cellsrow,subjectIndex + 2; Excel.Range rng1 = (Excel.Range)worksheet.Cellsrow, 1; if (rng.Value< 60) txtResult.Text += rng1.Value + " " if (txtResult.Text.Length =
15、 0) txtResult.Text = subjectName + "沒有不及格的同學(xué)" 運行該項目結(jié)果為:六、小結(jié)到這里本專題的介紹就結(jié)束了, 本專題首先主要介紹了Excel的對象模型和如何創(chuàng)建Excel的兩種項目類型,希望通過本專題大家可以開發(fā)出一些簡單的Excel的解決方案,后面一個專題將為大家介紹如何為Excel自定義一個選項卡和上下文菜單。專題源碼:VSTO之旅系列(三):自定義Excel UI2013-03-04 01:00:170本專題概要· 引言· 自定義任務(wù)窗體(Task Pane)· 自定義選項卡,即Ribbon·
16、; 自定義上下文菜單· 小結(jié)引言在上一個專題中為大家介紹如何創(chuàng)建Excel的解決方案,相信大家通過從上面一個專題之后了解了Excel的對象模型,以及Office兩種解決方案的,看完上一個專題之后,肯定很多朋友想為Excel自定義屬于自己的UI界面,例如,有這樣的一些疑問是否可以使用VSTO來自定義選項卡呢? 是否可以自定義上下文菜單的呢?如果你也有這些疑問的話,相信通過本專題你將會得到答案的,下面就開始我們本專題的介紹。二、自定義任務(wù)窗體 在使用Word2010的時候我們可以通過左邊的導(dǎo)航來看了解文檔的結(jié)構(gòu),同時我們也可以在輸入框的地方輸入文字來進(jìn)行搜索,然而這個左邊的導(dǎo)航
17、就是一個任務(wù)窗體,相信通過下面的圖大家可以理解Word中那部分是一個任務(wù)窗體:但是我們在使用Excel中卻沒有找到類似的任務(wù)窗體,這時候大家肯定會有這樣一個疑問如果我想在Excel也想實現(xiàn)一個自定義任務(wù)窗體該怎么辦呢?用VSTO可以幫我們辦到嗎?答案是肯定的。首先先模擬一個需求的,相信大家都知道使用F1是打開一個幫助文檔,但是彈出的幫助文檔是與Excel在不同界面的,所以很多朋友在查閱幫助的文檔的時候都需要縮小Excel文檔來查閱,這樣就顯得有些不方便了,我在使用的時候就想,能不能把幫助文檔繼承在Excel的右邊呢?這樣我們查閱Excel幫助文檔就方便多了,就不要縮小Excel文檔,或在Exc
18、el和幫助文檔之間左右切換了。既然有這種需求,我們就有實現(xiàn)它的必要性,下面就具體說說如何實現(xiàn)的:首先在看具體代碼之前,我向大家分析下實現(xiàn)一個任務(wù)窗體的思路:· 首先,任務(wù)窗體是一個窗體,當(dāng)然就需要在創(chuàng)建的Excel解決方案中創(chuàng)建一個窗體的了,這里我們創(chuàng)建了一個用戶控件。· 創(chuàng)建和設(shè)計完用戶控件的界面之后,我們就需要把這個用戶控件添加到Excel中去了,然而我們在以前的接觸的開發(fā)中,添加控件都是把控件添加到某個幾個中去的,例如WinForm中要向窗體添加一個button按鈕,就需要把這個button添加進(jìn)Controls集合中,同樣VSTO也提供這樣一個把任務(wù)面板添加進(jìn)去的集
19、合 Microsoft.Office.Tools.CustomTaskPaneCollection,我們可以通過 這行代碼來獲得這個集合,然后調(diào)用Add方法就可以把我們自定義的任務(wù)面板添加進(jìn)Excel中了。· 添加進(jìn)去之后,我們還需要使任務(wù)面板顯示出來,這樣就涉及了Visible屬性了,確實 Microsoft.Office.Tools.CustomTaskPane 也有Visible屬性有了上面的分析過程之后,相信大家看下面的代碼會比較容易理解,另外注意的一點是,因為我們要實現(xiàn)的幫助文檔的任務(wù)窗體,由于幫助文檔是在瀏覽器中顯示的,這樣我們就需要集成一個
20、瀏覽器到我們的創(chuàng)建的用戶控件中的,大家看到瀏覽器這個詞可千萬不要覺得有所畏懼,因為微軟提供了WebBrowser控件來幫助我們實現(xiàn),對于瀏覽器的更多內(nèi)容可以參看我的這篇博客:自定義Web瀏覽器, 自定義任務(wù)窗體的代碼如下: public partial class ThisAddIn / 定義一個任務(wù)窗體 internal Microsoft.Office.Tools.CustomTaskPane helpTaskPane; private void ThisAddIn_Startup(object sender, System.EventArgs e) / 把自定義窗體添加到CustomTa
21、skPanes集合中 / ExcelHelp 是一個自定義控件類 helpTaskPane = Globals.ThisAddIn.CustomTaskPanes.Add(new ExcelHelp(""), "Excel Help"); / 使任務(wù)窗體可見 helpTaskPane.Visible = true; / 通過DockPosition屬性來控制任務(wù)窗體的??课恢茫?/ 設(shè)置為 MsoCTPDockPosition.msoCTPDockPositionRight這個代表??康接疫叄@個值也是默認(rèn)值 /helpTaskPane.DockPosi
22、tion = MsoCTPDockPosition.msoCTPDockPositionRight; private void ThisAddIn_Shutdown(object sender, System.EventArgs e) 三、自定義選項卡,即Ribbon 上面實現(xiàn)的任務(wù)窗體在Excel一打開的時候就會顯示??吭贓xcel的右邊,如下圖所示:然而當(dāng)我們點擊任務(wù)窗體中的"X"按鈕就是關(guān)閉任務(wù)窗體,關(guān)閉之后就有一個問題,如果我們又想把幫助任務(wù)窗體顯示出來怎么辦呢?因為在Word中的導(dǎo)航窗體也不是一開始就顯示的(有些朋友可能打開的Word文檔沒有導(dǎo)航窗體),
23、此時我們通過勾選視圖選項卡中 “導(dǎo)航窗格”或點擊開始選項卡中的查找按鈕來顯示導(dǎo)航窗體:此時,我們就想在Excel中是否可以自定義一個選項卡,通過選項卡中按鈕來顯示/隱藏 Excel的幫助任務(wù)窗體呢?下面就具體介紹如何創(chuàng)建一個自定義選項卡:1. 右鍵你的Excel項目,添加>新建項,在彈出的添加新項窗口中選擇 "功能區(qū)(可視化設(shè)計器)" 2. 輸入名稱之后單擊添加按鈕3. 設(shè)計選項卡UI界面,本例子中添加了一個toggleButton.通過上面的步驟就可以創(chuàng)建一個自定義選項卡,這種方式創(chuàng)建的選項卡在Excel項目(針對的是外接Excel項目類型)啟動的時候就會
24、被加載。下面具體介紹了如何設(shè)計選項卡(即Ribbon):1. 設(shè)計RibbonTab,首先把ControlIdType屬性設(shè)置為Custom,不然我們設(shè)計的RibbonGroup部分將會在加載項選項卡下,然后設(shè)置Name為HelpTab,這樣我們創(chuàng)建的選項卡才會成為一個新的選項卡,如果我們想把ToggleButton放在Home選項卡下顯示,此時我們只需要把ControlIdType設(shè)置為Office,然后把OfficeId設(shè)置為TabHome, 具體情況大家可以測試看看的,關(guān)于Office 中內(nèi)置的Control ID 列表,大家可以從下面這個鏈接下載: 2007 Of
25、fice System Document: Lists of Control IDs 2. 從工具箱中拖出一個ToggleButton,把Label屬性設(shè)置為Help,并把ControlSize屬性設(shè)置為RibbonControlSizeLarge:3. 雙擊 Help ToggleButton按鈕,實現(xiàn)它的單擊事件: / 幫助選項卡中toggleButton的單擊事件 private void toggleHelpBtn_Click(object sender, RibbonControlEventArgs e) / 通過toggleHelpButton的選中狀態(tài)來控制幫助任務(wù)欄的
26、顯示和隱藏 Globals.ThisAddIn.helpTaskPane.Visible = toggleHelpBtn.Checked; 通過上面的三步也就完成了一個Ribbon的創(chuàng)建了,當(dāng)我們創(chuàng)建好一個Ribbon之后,我們可以通過我們自定義的Ribbon下的按鈕來顯示/隱藏我們的任務(wù)窗體,但是到這里,Ribbon的開發(fā)并沒有結(jié)束,此時還有一個問題就是當(dāng)我們點擊 “Excel help”右上角的X按鈕關(guān)閉時,我們Ribbon下的按鈕狀態(tài)也要跟著更變(大家可以測試,當(dāng)我們關(guān)閉Word中的導(dǎo)航任務(wù)窗體時,試圖下的"導(dǎo)航窗格"復(fù)選框“也會跟著改變),此時我們就需要實現(xiàn):點擊關(guān)
27、閉按鈕與Help按鈕狀態(tài)同步的功能的,此時我們只需要對TaskPane的VisibleChanged事件進(jìn)行處理就可以(因為關(guān)閉任務(wù)窗體就會觸發(fā)該事件,所以只需要把同步狀態(tài)的代碼放在該事件就可以了),具體代碼如下:/ 定義一個任務(wù)窗體 internal Microsoft.Office.Tools.CustomTaskPane helpTaskPane; private void ThisAddIn_Startup(object sender, System.EventArgs e) / 把自定義窗體添加到CustomTaskPanes集合中 / ExcelHelp 是一個自定義控件類 hel
28、pTaskPane = Globals.ThisAddIn.CustomTaskPanes.Add(new ExcelHelp(""), "Excel Help"); / 使任務(wù)窗體可見 /helpTaskPane.Visible = true; / 通過DockPosition屬性來控制任務(wù)窗體的??课恢茫?/ 設(shè)置為 MsoCTPDockPosition.msoCTPDockPositionRight這個代表??康接疫叄@個值也是默認(rèn)值 /helpTaskPane.DockPosition = MsoCTPDockPosition.msoCTPDoc
29、kPositionRight; / 當(dāng)用戶點擊 “Excel help”右上角的X按鈕關(guān)閉時,我們需要同步選項卡上button的狀態(tài) helpTaskPane.VisibleChanged += new EventHandler(helpTaskPane_VisibleChanged); / 添加上下文菜單 /AddToCellMenu(); private void ThisAddIn_Shutdown(object sender, System.EventArgs e) / 用戶點擊 "Excel Help" 側(cè)邊欄右上角的X按鈕關(guān)閉它時 / 我們需要正確同步 “幫助”按鈕的狀態(tài) / 我們可以通過處理 “Excel Help”側(cè)邊欄的VisualChanged 事件完成 private void helpTaskPane_VisibleChanged(object sender, EventAr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024高考地理一輪復(fù)習(xí)第三部分區(qū)域可持續(xù)發(fā)展-重在綜合第三章區(qū)域自然資源的開發(fā)利用第31講流域的綜合開發(fā)學(xué)案新人教版
- DB42-T 2353-2024 公路隧道巖溶水文地質(zhì)勘察規(guī)程
- 集體倉庫租賃合同(5篇)
- 二零二五年度餐廳后廚裝修設(shè)計與施工合同2篇
- 二零二五年度車輛質(zhì)押車輛保險代理及租賃服務(wù)協(xié)議2篇
- 第8課《城鄉(xiāng)改革不斷深入》課件
- 2024年浙江金融職業(yè)學(xué)院高職單招職業(yè)技能測驗歷年參考題庫(頻考版)含答案解析
- 醫(yī)療行業(yè)供需現(xiàn)狀與發(fā)展戰(zhàn)略規(guī)劃
- 2024年陽泉市第二人民醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 2024年河南檢察職業(yè)學(xué)院高職單招職業(yè)技能測驗歷年參考題庫(頻考版)含答案解析
- 2024-2030年中國電子郵箱行業(yè)市場運營模式及投資前景預(yù)測報告
- 基礎(chǔ)設(shè)施零星維修 投標(biāo)方案(技術(shù)方案)
- 新型電力系統(tǒng)背景下新能源發(fā)電企業(yè)技術(shù)監(jiān)督管理體系創(chuàng)新
- 北京市海淀區(qū)2023-2024學(xué)年高二上學(xué)期期末考試 英語 含答案
- 幼小銜接-認(rèn)識植物-課件
- 蘇教版三年級上冊數(shù)學(xué)口算題1000道帶答案
- 南孔儒學(xué)完整版本
- 小學(xué)語文一年級上冊《秋天》評課稿
- 《公共科目》軍隊文職考試試題及解答參考(2024年)
- 眼鏡制造加工合作協(xié)議
- 公立醫(yī)院運營管理工作計劃
評論
0/150
提交評論