1. 程式人生 > >Excel催化劑開源第7波-VSTO開發中Ribbon動態載入選單

Excel催化劑開源第7波-VSTO開發中Ribbon動態載入選單

在VS開發環境中,特別是VSTO的開發,微軟已經現成地給開發者準備了設計器模式的功能區開發,相對傳統的VBA、ExcelDna和其他方式的COM載入項開發來說,不需要手寫xml功能區,直接類似拖拉窗體控制元件一樣,即可完成Ribbon功能區的開發,開發效率極高。

這樣的開發方式,非常適合於對Ribbon沒有太高要求,太多的高階定製需要的場景,一般來說足夠普通外掛開發的需要,給使用者在Ribbon功能區安放個按鈕,讓使用者可以點選按鈕即可觸發某個功能執行。

有某些場景,想動態地載入選單時,在設計器的功能區開發中,相對xml功能區,來得更容易,本篇給大家介紹兩種場景。

具體場景

場景一、某些情況下才顯示某個按鈕

在Excel催化劑中,有一個【智慧選區】的選單,僅在使用者選擇資料區域,且僅選擇一個單元格時,才會顯示出來。

 

  不符合要求,不顯示按鈕   符合要求顯示按鈕

具體程式碼如下:

        public void ExcelApp_SheetSelectionChangeGalSelectRangeVisibleOrNot(object Sh, Excel.Range Target) { try { if (Target.Cells.CountLarge == 1 && Target.CurrentRegion.Cells.CountLarge > 1) { Globals.Ribbons.Ribbon1.galSelectRange.Visible = true;//用強型別方式呼叫控制元件的Visible屬性 } else { Globals.Ribbons.Ribbon1.galSelectRange.Visible = false; var panel = Utilities.TaskPanelUtility.GetCusTomTaskPaneByTitle(Utilities.TaskPanelUtility.SelectRangePanelTitle); if (panel != null) { panel.Visible = false; } } } catch (Exception) { } } 

場景二、動態載入選單專案數量

某些選單下的內容不固定,根據使用者的配置檔案資訊的條目資料多寡來動態載入,例如Excel催化劑中大量使用的動態選單效果

  在設計器中無需拖拉控制元件進來,程式碼動態生成

需要使用動態選單功能,需要在menu控制中,在設計器屬性中開啟Dynamic屬性

 

  開啟Menu控制元件的Dynamic屬性

在ItemsLoading事件中,用程式碼動態生成控制元件。

 
新增ItemsLoading事件

具體程式碼如下:

        public void menuNumberFormatSetting_ItemsLoading(object sender, RibbonControlEventArgs e)
        {
            try
            {
                //開啟任務窗格
                Utilities.TaskPanelUtility.ShowOrTaskHidePanel(Utilities.TaskPanelUtility.NumberFormatPanelTitle,
                                                                Utilities.TaskPanelUtility.UscNumberFormat,
                                                                Utilities.TaskPanelUtility.CustomTaskPanesOfNumberFormat,
                                                                500,
                                                                true); //動態生成選單 RibbonMenu menu = sender as RibbonMenu; menu.Items.Clear(); foreach (DataSet.AddinsDataSet.NumberFormatSettingRow row in Common.AddinsSettingDataset.NumberFormatSetting.Rows) { RibbonButton btn = Globals.Ribbons.Ribbon1.Factory.CreateRibbonButton(); btn.Name = "btnNumberFormat" + row.BtnIndex; btn.Label = row.BtnLabel; btn.Click += btnNumberFormat_Click; menu.Items.Add(btn); } } catch (Exception ex) { Common.OutMsgError(ex); } } 

場景三、指定跳轉至某功能區Tab選項卡

有時想讓程式碼控制跳轉到哪個功能區的TAB選項卡,例如本來程式碼執行完後,仍然想停留在外掛的TAB選項卡上,供使用者進行下一步按鈕訪問。

但因為上一步生成了圖表或ListObject智慧表之類的物件,功能區自動會智慧跳轉出這些物件相應的選項、設計等選項卡。外掛的選項卡就失去焦點了。

使用以下程式碼啟用TAB選項卡

 Globals.Ribbons.Ribbon1.RibbonUI.ActivateTab("excelCatalyzer"); 
  ActivateTab方法呼叫引數來源於自己命名的TAB名稱而非Label

結語

使用VSTO開發,可以有現成的功能區設計器模式可利用,無需手工書寫xml功能區,作大量的回撥函式處理等,並且在動態顯示、隱藏控制元件、動態新增選單子項等操作都非常靈活方便,不失為VSTO開發的一大優勢,雖然VSTO也有其弱點,但綜合它帶來的優勢,筆者更喜歡使用VSTO來做開發。

技術交流QQ群

QQ群名:Excel催化劑開源討論群, QQ群號:788145319

 

  Excel催化劑開源討論群二維碼

關於Excel催化劑

Excel催化劑先是一微信公眾號的名稱,後來順其名稱,正式推出了Excel外掛,外掛將持續性地更新,更新的週期視本人的時間而定爭取一週能夠上線一個大功能模組。Excel催化劑外掛承諾個人使用者永久性免費使用!

Excel催化劑外掛使用最新的佈署技術,實現一次安裝,日後所有更新自動更新完成,無需重複關注更新動態,手動下載安裝包重新安裝,只需一次安裝即可隨時保持最新版本!

Excel催化劑外掛下載連結:https://pan.baidu.com/s/1Iz2_NZJ8v7C9eqhNjdnP3Q

  聯絡作者   公眾號

取名催化劑,因Excel本身的強大,並非所有人能夠立馬享受到,大部分人還是在被Excel軟體所虐的階段,就是頭腦裡很清晰想達到的效果,而且高手們也已經實現出來,就是自己怎麼弄都弄不出來,或者更糟的是還不知道Excel能夠做什麼而停留在不斷地重複、機械、手工地在做著資料,耗費著無數的青春年華歲月。所以催生了是否可以作為一種媒介,讓廣大的Excel使用者們可以瞬間點燃Excel的爆點,無需苦苦地掙扎地沒日沒夜的技巧學習、高階複雜函式的燒腦,最終走向了從入門到放棄的道路。

最後Excel功能強大,其實還需樹立一個觀點,不是所有事情都要交給Excel去完成,也不是所有事情Excel都是十分勝任的,外面的世界仍然是一個廣闊的世界,Excel只是其中一枚耀眼的明星,還有其他更多同樣精彩強大的技術、工具等。*Excel催化劑也將借力這些其他技術,讓Excel能夠發揮更強大的爆發!

關於Excel催化劑作者

姓名:李偉堅,從事資料分析工作多年(BI方向),一名同樣在路上的學習者。
服務過行業:零售特別是鞋服類的零售行業,電商(淘寶、天貓、京東、唯品會)

技術路線從一名普通使用者,通過Excel軟體的學習,從此走向資料世界,非科班IT專業人士。
歷經重重難關,終於在資料的道路上達到技術平原期,學習眾多的知識不再太吃力,同時也形成了自己的一套資料解決方案(資料採集、資料加工清洗、資料多維建模、資料報表展示等)。

擅長技術領域:Excel等Office家族軟體、VBA&VSTO的二次開發、Sqlserver資料庫技術、Sqlserver的商業智慧BI技術、Powerbi技術、雲伺服器佈署技術等等。

2018年開始職業生涯作了重大調整,從原來的正職工作,轉為自由職業者,暫無固定收入,暫對前面道路不太明朗,苦重新回到正職工作,對Excel催化劑的運營和開發必定受到很大的影響(正職工作時間內不可能維護也不可能隨便把工作時間內的成果公佈於外,工作外的時間也十分有限,因已而立之年,家庭責任重大)。

和廣大擁護者一同期盼:Excel催化劑一直能執行下去,我所惠及的群體們能夠給予支援(多留言鼓勵下、轉發下朋友圈推薦、小額打賞下和最重點的可以和所在公司及同行推薦推薦,讓我的技術可以在貴司發揮價值,實現雙贏(初步設想可以資料顧問的方式或一些小型專案開發的方式合作)。

技術交流QQ群

QQ群名:Excel催化劑開源討論群, QQ群號:788145319

 

  Excel催化劑開源討論群二維碼

關於Excel催化劑

Excel催化劑先是一微信公眾號的名稱,後來順其名稱,正式推出了Excel外掛,外掛將持續性地更新,更新的週期視本人的時間而定爭取一週能夠上線一個大功能模組。Excel催化劑外掛承諾個人使用者永久性免費使用!

Excel催化劑外掛使用最新的佈署技術,實現一次安裝,日後所有更新自動更新完成,無需重複關注更新動態,手動下載安裝包重新安裝,只需一次安裝即可隨時保持最新版本!

Excel催化劑外掛下載連結:https://pan.baidu.com/s/1Iz2_NZJ8v7C9eqhNjdnP3Q

  聯絡作者   公眾號

取名催化劑,因Excel本身的強大,並非所有人能夠立馬享受到,大部分人還是在被Excel軟體所虐的階段,就是頭腦裡很清晰想達到的效果,而且高手們也已經實現出來,就是自己怎麼弄都弄不出來,或者更糟的是還不知道Excel能夠做什麼而停留在不斷地重複、機械、手工地在做著資料,耗費著無數的青春年華歲月。所以催生了是否可以作為一種媒介,讓廣大的Excel使用者們可以瞬間點燃Excel的爆點,無需苦苦地掙扎地沒日沒夜的技巧學習、高階複雜函式的燒腦,最終走向了從入門到放棄的道路。

最後Excel功能強大,其實還需樹立一個觀點,不是所有事情都要交給Excel去完成,也不是所有事情Excel都是十分勝任的,外面的世界仍然是一個廣闊的世界,Excel只是其中一枚耀眼的明星,還有其他更多同樣精彩強大的技術、工具等。*Excel催化劑也將借力這些其他技術,讓Excel能夠發揮更強大的爆發!

關於Excel催化劑作者

姓名:李偉堅,從事資料分析工作多年(BI方向),一名同樣在路上的學習者。
服務過行業:零售特別是鞋服類的零售行業,電商(淘寶、天貓、京東、唯品會)

技術路線從一名普通使用者,通過Excel軟體的學習,從此走向資料世界,非科班IT專業人士。
歷經重重難關,終於在資料的道路上達到技術平原期,學習眾多的知識不再太吃力,同時也形成了自己的一套資料解決方案(資料採集、資料加工清洗、資料多維建模、資料報表展示等)。

擅長技術領域:Excel等Office家族軟體、VBA&VSTO的二次開發、Sqlserver資料庫技術、Sqlserver的商業智慧BI技術、Powerbi技術、雲伺服器佈署技術等等。

2018年開始職業生涯作了重大調整,從原來的正職工作,轉為自由職業者,暫無固定收入,暫對前面道路不太明朗,苦重新回到正職工作,對Excel催化劑的運營和開發必定受到很大的影響(正職工作時間內不可能維護也不可能隨便把工作時間內的成果公佈於外,工作外的時間也十分有限,因已而立之年,家庭責任重大)。

和廣大擁護者一同期盼:Excel催化劑一直能執行下去,我所惠及的群體們能夠給予支援(多留言鼓勵下、轉發下朋友圈推薦、小額打賞下和最重點的可以和所在公司及同行推薦推薦,讓我的技術可以在貴司發揮價值,實現雙贏(初步設想可以資料顧問的方式或一些小型專案開發的方式合作)。