Excel-DNA项目只用1个文件实现Ribbon CustomUI和CustomTaskpane定制【VB.Net版】

Excel-DNA项目中的自定义功能区和自定义任务窗格需要用到各种命名空间、添加所需文件,才能实现。后来我发现可以把所有代码都写在Class1.vb这个默认文件中。

大家可以在Visual Studio中创建一个类库项目(.Net Framework),然后把默认的Class1.vb中的代码整体替换为下面我贴的这个代码。然后启动调试,就可以看到自定义功能区和任务窗格了。

 1 Imports System.Runtime.InteropServices 2 Imports ExcelDna.Integration 3 Imports ExcelDna.Integration.CustomUI 4 Imports Excel = Microsoft.Office.Interop.Excel 5 <ComVisible(True)> 6 Public Class Class1 7 Inherits ExcelRibbon 8 Implements IExcelAddIn 9 Public R As IRibbonUI10 Public Overrides Function GetCustomUI(RibbonID As String) As String11 Dim xml As XElement12 xml = <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="OnLoad">13 <ribbon startFromScratch="false">14 <tabs>15 <tab id="Tab1" label="RibbonXmlEditor">16 <group id="Group1" label="Author:ryueifu">17 <button id="Button1" label="CTP" imageMso="C" onAction="Button1_Click"/>18 <button id="Button2" label="UnLoad" imageMso="U" onAction="Button2_Click"/>19 </group>20 </tab>21 </tabs>22 </ribbon>23 </customUI>24 Return xml.ToString()25 End Function26 Public Sub OnLoad(ribbon As IRibbonUI)27 R = ribbon28 R.ActivateTab(ControlID:="Tab1")29 End Sub30 Public Sub Button1_Click(control As IRibbonControl)31 ctp.Visible = Not ctp.Visible32 End Sub33 Public Sub Button2_Click(control As IRibbonControl)34 Dim ThisAddin As Excel.AddIn35 ThisAddin = ExcelDnaUtil.Application.AddIns.Item(Index:=My.Application.Info.AssemblyName)36 ThisAddin.Installed = False37 End Sub38 39 Public Sub AutoOpen() Implements IExcelAddIn.AutoOpen40  Module1.CreateCTP()41 End Sub42 43 Public Sub AutoClose() Implements IExcelAddIn.AutoClose44  Module1.DisposeCTP()45 End Sub46 End Class47 48 Public Module Module149 Public uc As System.Windows.Forms.UserControl50 Public ctp As CustomTaskPane51 Public Sub CreateCTP()52 uc = New Windows.Forms.UserControl53 ctp = CustomTaskPaneFactory.CreateCustomTaskPane(userControl:=uc, title:="CTP")54 With ctp55 .DockPosition = MsoCTPDockPosition.msoCTPDockPositionRight56 .Visible = True57 End With58 End Sub59 Public Sub DisposeCTP()60  ctp.Dispose()61 End Sub62 End Module

 

相关文章