久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

【學習VSTO 】—— 制作自定義窗格1

 yuxinrong 2018-12-06
記不清什么時候了,,接觸過Kutools,感覺里面的“導航”功能很實用,,同時對VSTO也充滿了好奇,。暑假來了,終于有時間學習VSTO,,就從做自定義任務窗格入手吧,,讀書、上網查閱資料,終于做好了,,回味學習制作的過程,,深深的感到:不僅僅是自定義功能區(qū),也不僅僅是開發(fā)Excel插件,,VSTO(VB.NET) 很強大,、很方便,比如,,由于引入了.Net Framework,,有時你只需要聲明相關的命名空間,用一兩句代碼就可以實現在vb6,、vba中需要編寫大量代碼才可以實現的功能,。


        如果要對Office進行二次開發(fā),VSTO是未來趨勢,??上ВP于VSTO的書籍,、網上的資料少的可憐,,即使能找到的要么泛而全,要么是只言片語,,至今沒有找到系統(tǒng)詳細講解VSTO的資料。這只是學習VSTO,、摸索制作自定義窗格的一個過程,,目前還有錯誤和可以改進的地方,功能也很簡單,,如果在窗格里添加不同的控件可以實現更復雜的功能,。效果圖如下
 


        廢話有點多了,下面是具體制作步驟,,如果接觸過VS也許會好些,,不同版本,下面的內容將有細微不同(我這里是VS2010),。最后用兩種方法制作安裝程序,,簡單介紹vsto的部署功能。


        1,、打開VS2010,,單擊“文件”—“新建項目”,出現圖1窗口,,窗口左側依次單擊 Visual Basic”和“Office”前的“+”號展開,,根據安裝office版本的實際情況選擇一項(這里選擇“2010”),單擊窗口中部的下拉列表,,選擇.NET Framework的版本,。項目
類型選擇“Excel 2010 外接程序”,。修改名稱框處項目名字為“任務管理”,單擊“瀏覽”選擇保存項目的位置,。單擊“確定”,。




        
        2、如圖2,,單擊“項目”菜單—選擇“添加用戶控件”,。在出現如圖3窗口,選擇“用戶控件”,,修改名稱為“PaneControl”,,單擊“添加”。調整剛添加的“PaneControl”控件的大小,。


        
        3,、移動鼠標到“工具箱”處,如圖4,。顯示工具箱,,選擇“ListBox”項,移動鼠標到“工具箱”上的隱藏工具箱按鈕并單擊以隱藏工具箱,。在“PaneControl”控件上拖動鼠標添加ListBox1控件(用于顯示打開的所有工作?。H鐖D5,,在屬性窗口設置ListBox1控件的“Dock”屬性為“Top,Font”屬性為“小四”,,并適當調整大小。

        重復步驟3依次添加一個“Splitter”控件(展開“所有 Windows 窗體”前+號可找到該控件),,在屬性窗口設置其“Dock”屬性為“Top”,、 “Size”屬性中的“Height”為5。再添加一個ListBox控件(用于顯示活動工作薄中的所有表),,設置其“Dock”屬性為“Fill” “Font”屬性為“小四”,,并適當調整大小。(也可以使用Listview控件代替ListBox控件,,再配合ImageList控件,,這樣可以讓列表中的每一項都帶上圖標,視覺效果更好)最終效果如圖6,。

 

        窗格做好了,,上圖就是excel里要顯示的窗格的樣子,但僅僅是一個沒有任何功能界面,。下面添加相應的代碼讓窗格實現一定的功能,。

        4、單擊項目—選擇“添加模塊”—在出現的窗口里選擇“模塊”項,單擊“添加”,。添加如下代碼:


Module Module1
    Public XlApp As Excel.Application
    Public bOpen As Boolean
End Module


        為了能把打開的工作薄添加到ListBox1,,判斷哪個是活動工作薄,并且把活動工作薄對應的項選中,。在“解決方案資源管理器”里右擊“PaneControl.vb”—選擇“查看代碼”,,添加以下過程(代碼添加到Public Class PaneControl和End Class之間,后面其他模塊里添加代碼也是如此):


Public Sub FillBook()
Dim Wb As Microsoft.Office.Interop.Excel.Workbook
With ListBox1
.Items.Clear()
For Each Wb In XlApp.Workbooks
If bOpen Then
If Wb.Name <> "工作簿1" And Wb.Name <> "Book1" Then .Items.Add(Wb.Name)
            Else
.Items.Add(Wb.Name)
End If
Next
If .Items.Count = 0 Then
         .SelectedIndex = -1
         Else
         For i = 0 To .Items.Count - 1
                  If XlApp.ActiveWorkbook.Name = .Items(i) Then
                  .SelectedIndex = i
                      Exit For
                  End If
             Next
         End If

End With
bOpen=False
End Sub


        為了能把活動工作薄的表(ListBox1當前選中的項對應的工作?。┨砑拥絃istBox2,,判斷哪個是活動工作表,并且把活動工作表對應的項選中,。添加以下過程:


Public Sub FillSheet()
Dim Ws As Object
With ListBox2
.Items.Clear()
For Each Ws In XlApp.Workbooks(ListBox1.Text).Sheets
.Items.Add(Ws.Name)
Next
For i = 0 To .Items.Count - 1
If XlApp.ActiveSheet.Name = .Items(i) Then
.SelectedIndex = i
    Exit For
End If
Next
End With
End Sub


        5,、添加如下兩個過程,第一個過程用于在窗格里單擊不同工作薄時,,在excel界面激活并顯示該工作薄的內容,,然后在ListBox2中顯示該工作薄的所有表。第二個過程用于在窗格里單擊不同工作表時,,在excel界面激活并顯示該工作表的內容,。


Private Sub ListBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.Click
XlApp.Workbooks(ListBox1.Text).Activate()
Call FillSheet()
End Sub

Private Sub ListBox2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox2.Click
XlApp.Workbooks(ListBox1.Text).Sheets(ListBox2.Text).Activate()
End Sub


        在窗格加載時連接正在使用的excel應用程序對象,并填充列表框

Private Sub PaneControl_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
XlApp = Globals.ThisAddIn.Application  
Call FillBook()
Call FillSheet()
End Sub


        6,、單擊項目—選擇“添加新項”,,出現如圖7窗口,選擇“Office”項,,選擇“功能區(qū)(可視化編輯器)”項,,修改名稱為“PaneRibbon”,單擊“添加”,。(如果選擇“功能區(qū) (XML)”選項,,編寫XML代碼也可以實現上面功能區(qū),。)

 
        7,、在出現的新窗口里單擊“TabAddIns (內置)”選項卡,在屬性窗口按圖9修改,,單擊“Group1”組,,在屬性窗口清空“Label”屬性的內容(也可以輸入你想要的內容),按圖10修改,。

 

重復步驟3在組內添加一個“ToggleButton”控件(展開“Office 功能區(qū)控件”前+號可找到該控件),,設置其“ControlSize”屬性為“RibbonControlSizeLarge”,設置其“Label”屬性為“任務管理”,,設置其“Image”屬性,,出現如圖11窗口,選擇“本地資源”—“導入”—選擇準備好的文件(最好使用PNG格式的文件)—單擊“確定”。最終效果如圖8,。


        至此功能區(qū)也做好了,,下面添加代碼實現一定的功能

       9、在“解決方案資源管理器”里雙擊“ThisAddIn.vb”,,在模塊頂部聲明區(qū)添加如下聲明:


Private MyControl As PaneControl
Private WithEvents FilePane As Microsoft.Office.Tools.CustomTaskPane


        在插件加載時設置窗格并調整位置,,卸載時清空。添加如下代碼:
Private Sub ThisAddIn_Startup() Handles Me.Startup
        MyControl = New PaneControl()
        FilePane = Me.CustomTaskPanes.Add(MyControl, "任務管理")
        FilePane.DockPosition = Microsoft.Office.Core.MsoCTPDockPosition.msoCTPDockPositionLeft
End Sub


Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
        MyControl = Nothing
        FilePane = Nothing
End Sub


        窗格顯示狀態(tài)改變時功能區(qū)按鈕的狀態(tài)應隨著變化,,例如,,單擊任務窗格上的關閉按鈕,功能區(qū)的按鈕狀態(tài)應該變?yōu)槲催x中狀態(tài),。添加如下代碼:
Private Sub FilePane_VisibleChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles FilePane.VisibleChanged
        Globals.Ribbons.PaneRibbon.ToggleButton1.Checked = FilePane.Visible
End Sub


Public ReadOnly Property TaskPane() As Microsoft.Office.Tools.CustomTaskPane
        Get
            Return FilePane
        End Get
End Property


        當我們在excel界面選擇不同工作薄和工作表時應該在窗格里的兩個列表框里選中活動工作薄和活動工作表對應的項,。同樣的道理。打開,、新建,、關閉工作薄,新建,、刪除工作表時應該實時更新窗格里的列表框,,并且選中對應的項,所以添加如下代碼:

Private Sub Application_SheetActivate(ByVal Sh As Object) Handles Application.SheetActivate
        Call MyControl.FillSheet()
End Sub


Private Sub Application_WorkbookActivate(ByVal Wb As Microsoft.Office.Interop.Excel.Workbook) Handles Application.WorkbookActivate
        Call MyControl.FillBook()
        Call MyControl.FillSheet()
End Sub

        當只有一個工作薄時,,再關閉工作薄應該清空列表框
Private Sub Application_WorkbookDeactivate(ByVal Wb As Microsoft.Office.Interop.Excel.Workbook) Handles Application.WorkbookDeactivate
        If XlApp.Workbooks.Count = 1 Then
            MyControl.ListBox1.Items.Clear()
            MyControl.ListBox2.Items.Clear()
        End If
End Sub


        打開excel時會默認新建一個工作薄,,如果繼續(xù)打開其他工作薄,默認新建的工作薄會消失,,因此在xlApp_WorkbookOpen事件里利用bOpen全局變量(已經在模塊里聲明)配合“PaneRibbon.vb”里的Public Sub FillBook過程來實現打開工作薄時在窗格列表里清除默認新建的工作薄對應的項


Private Sub Application_WorkbookOpen(ByVal Wb As Microsoft.Office.Interop.Excel.Workbook) Handles Application.WorkbookOpen
        bOpen = True
End Sub


        9,、單擊功能區(qū)上我們添加的ToggleButton按鈕應該控制窗格顯示或隱藏,在“解決方案資源管理器”里右擊“PaneRibbon.vb”—選擇“查看代碼”,,添加如下代碼:


Private Sub ToggleButton1_Click(ByVal sender As System.Object, ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) Handles ToggleButton1.Click
    Globals.ThisAddIn.TaskPane.Visible = _
TryCast(sender, Microsoft.Office.Tools.Ribbon.RibbonToggleButton).Checked
End Sub


        10,、保存項目,單擊“生成”—選擇“生成 任務管理”,,打開excel可以看到效果,。再次單擊“生成”—選擇“發(fā)布 任務管理”,在出現的窗口里單擊“瀏覽”,,選擇保存位置,,單擊“完成”,生成的文件可以安裝,,在控制面板中可以卸載,。(計算機上必須要安裝有.net framework 4.0),保存項目,。


        上面的安裝程序制作是簡單方法,,是部署功能的簡化,,采用部署功能制作安裝程序更正規(guī)一些。由于vs的部署牽扯的東西較多,,比如安全,,版本等,是一個很復雜的功能,,下面只是簡單演示如何制作加載項的安裝程序,。先上安裝程序,稍后上源碼,。

安裝.rar

247.29 KB, 下載次數: 640

    本站是提供個人知識管理的網絡存儲空間,,所有內容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內容中的聯系方式,、誘導購買等信息,謹防詐騙,。如發(fā)現有害或侵權內容,,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多