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催化劑一直能運行下去,我所惠及的群體們能夠給予支持(多留言鼓勵下、轉發下朋友圈推薦、小額打賞下和最重點的可以和所在公司及同行推薦推薦,讓我的技術可以在貴司發揮價值,實現雙贏(初步設想可以數據顧問的方式或一些小型項目開發的方式合作)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM