• VSTO外接程序项目只用1个文件实现Ribbon CustomUI和CustomTaskpane定制【C#版】


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

    大家可以在Visual Studio中创建一个外接程序项目,然后把ThisAddin.cs中的代码整体替换为下面我贴的这个代码。然后启动调试,就可以看到自定义功能区和任务窗格了。

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Xml.Linq;
     6 using Excel = Microsoft.Office.Interop.Excel;
     7 using Office = Microsoft.Office.Core;
     8 using Microsoft.Office.Tools.Excel;
     9 
    10 namespace ExcelAddInTemplate_CS
    11 {
    12     public partial class ThisAddIn
    13     {
    14         private void ThisAddIn_Startup(object sender, System.EventArgs e)
    15         {
    16             Module1.CreateCTP();
    17         }
    18 
    19         private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
    20         {
    21             Module1.DisposeCTP();
    22         }
    23         protected override Office.IRibbonExtensibility CreateRibbonExtensibilityObject()
    24         {
    25             return new Ribbon1();
    26         }
    27         #region VSTO generated code
    28 
    29         /// <summary>
    30         /// Required method for Designer support - do not modify
    31         /// the contents of this method with the code editor.
    32         /// </summary>
    33         private void InternalStartup()
    34         {
    35             this.Startup += new System.EventHandler(ThisAddIn_Startup);
    36             this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
    37         }
    38         
    39         #endregion
    40     }
    41     [System.Runtime.InteropServices.ComVisible(true)]
    42     public class Ribbon1:Microsoft.Office.Core.IRibbonExtensibility
    43     {
    44         public Office.IRibbonUI R;
    45         string Office.IRibbonExtensibility.GetCustomUI(string RibbonID)
    46         {
    47             string xml= @"<customUI xmlns='http://schemas.microsoft.com/office/2009/07/customui' onLoad='OnLoad'>
    48     <ribbon startFromScratch='false'>
    49         <tabs>
    50             <tab id='Tab1' label='RibbonXmlEditor'>
    51                 <group id='Group1' label='Author:ryueifu'>
    52                     <button id='Button1' label='CTP' imageMso='C' onAction='Button1_Click'/>
    53                     <button id='Button2' label='UnLoad' imageMso='U' onAction='Button2_Click'/>
    54                 </group>
    55             </tab>
    56         </tabs>
    57     </ribbon>
    58 </customUI>";
    59             return xml;
    60         }
    61         public void OnLoad(Office.IRibbonUI ribbon)
    62         {
    63             R = ribbon;
    64             R.ActivateTab(ControlID: "Tab1");
    65         }
    66         public void Button1_Click(Office.IRibbonControl control)
    67         {
    68             Module1.ctp.Visible = !Module1.ctp.Visible;
    69         }
    70         public void Button2_Click(Office.IRibbonControl control)
    71         {
    72             Office.COMAddIn ThisCOM = Globals.ThisAddIn.Application.COMAddIns.Item("ExcelAddInTemplate_CS");
    73             ThisCOM.Connect = false;
    74         }
    75 
    76     }
    77     public static class Module1
    78     {
    79         public static System.Windows.Forms.UserControl uc;
    80         public static Microsoft.Office.Tools.CustomTaskPane ctp;
    81         public static void CreateCTP()
    82         {
    83             uc = new System.Windows.Forms.UserControl();
    84             ctp = Globals.ThisAddIn.CustomTaskPanes.Add(control: uc, title: "CTP");
    85             ctp.DockPosition = Office.MsoCTPDockPosition.msoCTPDockPositionRight;
    86             ctp.Visible = true;
    87         }
    88         public static void DisposeCTP()
    89         {
    90             ctp.Dispose();
    91         }
    92     }
    93 }
  • 相关阅读:
    java基础面试题(一)
    关于Redis的十个高频面试问题
    postgres中的merge join
    cgdb调试postgresql
    再见了,程序员!
    掌握这个小技巧,让你的 C++ 编译速度提升 50 倍!
    C语言修仙大法!基础知识全复习(纯干货)!!!
    一锅端了!北京朝阳一互联网公司被端,警方上门,23人被带走…
    C++入口不是main?知乎上都快打起来了,你们不要再打了啦!
    不用创建项目,直接在 VS 里快速测试 C/C++ 代码 !
  • 原文地址:https://www.cnblogs.com/ryueifu-VBA/p/10122601.html
Copyright © 2020-2023  润新知