使用C#开发Excel插件

之前个人VB写了一个的excel插件,今日想用c#写一个,百度了一下,泛滥的抄袭湮灭了有用的信息,依据国外网站能得到精华文章的惯例,这次也找到了一个,由于半桶水,花了几个小时百度修正了其中的错误

COM加载项(COM Add-ins )需要引用Extensibility.IDTextensibility2接口

如果使用COM加载项方式插件必须引用此接口。

C# dll文件必须注册才能使用,就不缀述了。

同时COM加载项还要在Microsoft Office里面注册才能被程序识别,这需要手动在 HKEY_CURRENT_USER.增加注册表键值

创建

  -打开Visual Studio 2017 (管理员权限)

-新建工程,Visual c#,类库(.NET Framework).

-更改项目名称为"ExcelCOMAddin".

-定位到本地某个文件夹,比如D:\respos

-重命名Class1.cs文件为MyConnect.cs

-增加项目引用(工程>添加引用)

 --程序集-拓展,找到“Extensibility”,“System.Windows.Forms",

--COM:Microsoft Office 16.0 Object Library",

删除默认的代码,增加如下内容到Myconnect.cs文件,需要注意,鼠标分别置于 IDTExtensibility2和IRibbonExtensibility上→点击黄色小灯泡→实现接口→VS会自动添加以下相关事件

namespace ExcelCOMAddin 
{ 
    [System.Runtime.InteropServices.Guid("5FA4884F-AA70-40C0-A4EC-F5390930B152")] 
    [System.Runtime.InteropServices.InterfaceType( 
        System.Runtime.InteropServices.ComInterfaceType.InterfaceIsDual)] 
    [System.Runtime.InteropServices.ComVisible(true)] 
    public interface IMyConnect : Extensibility.IDTExtensibility2,IRibbonExtensibility
    { 
        new void OnConnection( 
            object Application, 
            Extensibility.ext_ConnectMode ConnectMode, 
            object AddInInst, 
            ref Array custom); 
        new void OnDisconnection( 
            Extensibility.ext_DisconnectMode RemoveMode, 
            ref Array custom); 
        new void OnAddInsUpdate(ref Array custom); 
        new void OnStartupComplete(ref Array custom); 
        new void OnBeginShutdown(ref Array custom); 

        new string GetCustomUI(string RibbonID); 
    } 

在接口下面继续添加如下内容

    [System.Runtime.InteropServices.ProgId("ExcelCOMAddin.MyConnect")]
    [System.Runtime.InteropServices.ComDefaultInterface(typeof(IMyConnect))]
    [System.Runtime.InteropServices.Guid("DE3911A1-C82F-42F1-BEFB-F3802E1B6D34")]
    [System.Runtime.InteropServices.ClassInterface(
            System.Runtime.InteropServices.ClassInterfaceType.None)]
    [System.Runtime.InteropServices.ComVisible(true)]
    public class MyConnect : IMyConnect
    {
        Microsoft.Office.Interop.Excel.Application _ApplicationObject;
        Microsoft.Office.Core.COMAddIn _AddinInstance;

        public void OnConnection(
            object Application,
            Extensibility.ext_ConnectMode ConnectMode,
            object AddInInst,
            ref Array custom)
        {
            this._ApplicationObject = (Microsoft.Office.Interop.Excel.Application)Application;

            if (this._AddinInstance == null)
            {
                this._AddinInstance = (Microsoft.Office.Core.COMAddIn)AddInInst;
                this._AddinInstance.Object = this;
            }

            System.Windows.Forms.MessageBox.Show("onConnection");
        }
        public void OnDisconnection(
            Extensibility.ext_DisconnectMode RemoveMode,
            ref Array custom)
        {
            this._ApplicationObject = null;
            this._AddinInstance = null;
        }
        public void OnAddInsUpdate(ref Array custom)
        { }
        public void OnStartupComplete(ref Array custom)
        { }
        public void OnBeginShutdown(ref Array custom)
        { }

        public string GetCustomUI(string RibbonID)
        {
            return "";
        }
    }

选择生成-生成解决方案

选择项目属性,切换到生成标签,勾选 "Register for COM Interop" 

关闭属性窗口,重新生成解决方案

编译时,RegASM自动运行

C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe\ RegAsm /codebase ExcelCOMAddin.dll

为COM加载项注册

打开注册表至:HKEY_CURRENT_USER\Software\Microsoft\Office\Excel\Addins\

增加如下:

HKEY_CURRENT_USER\Software\Microsoft\Office\Excel\Addins\ExcelCOMAddin.MyConnect 
(String)(Default) - (value not set) 
(String) Description - A Long Description 
(String) FriendlyName - ExcelCOMAddin 
(DWord) LoadBehavior - 2 

打开Excel,新建空白工作簿

打开文件-选项,切到加载项标签,在下拉框选择”COM加载项“,选中”ExcelCOMAddin“并保存。

加载成功会弹出一个对话框

增加Ribbon.xml

添加一个文件,选择xml文件

贴入如下内容,并将属性更改为“内嵌资源”

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon startFromScratch="false">
    <tabs>
      <tab id="DemoTab" label="范例">
        <group id="loadFormsGroup" label="测试分组">
          <button id="btn1" label="按钮一" onAction="Button_One_Click" getImage="GetImage"/>
          <button id="btn2" label="按钮二" onAction="Button_Two_Click" getImage="GetImage"/>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

在Myconnect.cs增加如下内容

 public string GetCustomUI(string RibbonID) 
        { 
            return GetResourceText("ExcelComAddin.Ribbon.xml"); 
        } 

        private static string GetResourceText(string resourceName) 
        { 
            System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly(); 
            string[] resourceNames = asm.GetManifestResourceNames(); 

            for (int i = 0; i < resourceNames.Length; ++i) 
            { 
                if (string.Compare(resourceName, resourceNames[i], StringComparison.OrdinalIgnoreCase) == 0) 
                { 
                    using (System.IO.StreamReader resourceReader = new System.IO.StreamReader(asm.GetManifestResourceStream(resourceNames[i]))) 
                    { 
                        if (resourceReader != null) 
                        { 
                            return resourceReader.ReadToEnd(); 
                        } 
                    } 
                } 
            } 
            return null; 
        } 

重新编译解决方案,打开Excel,你会发现增加了新的Riboon界面

本人已经打包,需要范例请从以下地址下载:

https://download.csdn.net/download/fleetstar/20024549

### 回答1: WinForms是Microsoft .NET Framework中的一种应用程序开发框架,它提供了一种创建Windows应用程序用户界面的简单方法。 WinForms使用基于事件的模型来处理用户交互,并且使用面向对象的方法来构建应用程序。它提供了许多预定义的控件,如按钮、文本框、列表框等,开发者可以通过在设计视图中拖拽和放置这些控件来创建用户界面。同时,开发者也可以通过编写代码来控制控件的行为和属性。 WinForms具有很强的可定制性,开发者可以通过设置控件的属性来改变其外观和行为,还可以通过继承现有的控件来创建自定义控件。除了提供基本的Windows控件,WinForms还支持绘制自定义的图形和控件,以满足特定的应用需求。 WinForms提供了一套简单易用的事件处理机制,开发者可以为控件注册事件处理方法,当事件发生时,这些方法会被自动调用。开发者还可以添加各种事件处理器来响应用户的操作,如按钮的点击事件、鼠标移动事件等。 WinForms还提供了数据绑定功能,使开发者能够将控件与数据源相绑定,实时反映数据的变化。这样,开发者就可以简单地操作数据,并将其显示在界面上,而无需手动处理数据的更新和刷新。 总而言之,WinForms是一个功能强大且易于使用的框架,它使开发者能够快速创建Windows应用程序,并提供了丰富的功能和可定制性。无论是初学者还是经验丰富的开发者,都可以轻松上手并发挥其优势。 ### 回答2: WinForm C# 是一种开发桌面应用程序的技术,它是使用C#语言在Windows操作系统上开发的。使用WinForm C#可以快速、简单地创建具有丰富用户界面和功能的应用程序。 WinForm C#提供了一系列的控件和功能,可以方便地进行用户界面的设计和开发。通过拖拽控件,设定属性,以及编写事件处理方法,我们可以轻松地实现按钮、文本框、列表框、菜单等常见的界面元素。同时,WinForm C#还提供了丰富的布局方式,可以让用户界面更加美观、易于操作。 除了用户界面,WinForm C#还提供了很多有用的功能。例如,我们可以利用WinForm C#来访问数据库,进行数据的增删改查操作。我们也可以使用WinForm C#来操作文件系统,创建、读取、写入文件等。此外,WinForm C#还支持网络编程,可以实现与远程服务器的通信。 使用WinForm C#开发应用程序具有很多优点。首先,它基于.NET框架,拥有强大的功能和性能。其次,WinForm C#具有良好的可视化开发环境,使开发人员可以更快速地进行开发和调试。此外,WinForm C#还提供了丰富的文档和示例代码,方便开发人员学习和使用。 总之,WinForm C#是一种强大的开发技术,可以帮助我们快速开发出功能强大、界面友好的桌面应用程序。无论是初学者还是经验丰富的开发人员都可以借助WinForm C#开发自己的应用程序。 ### 回答3: WinForms是一种用于创建Windows桌面应用程序的用户界面框架,它是基于.NET平台的一部分。通过使用C#编程语言,开发人员可以使用WinForms快速构建交互式和功能丰富的Windows应用程序。 WinForms提供了一组丰富的控件,如文本框、按钮、标签等,这些控件可以自由布局在窗体上,以构建用户友好的界面。此外,WinForms还支持数据绑定和事件处理,使开发人员能够轻松地控制用户界面和处理用户操作。 WinForms还具有良好的可定制性和扩展性。开发人员可以根据自己的需要自定义控件的外观和行为,以满足特定的应用程序需求。此外,通过使用第三方控件库,开发人员可以进一步扩展WinForms的功能。 在使用WinForms进行C#开发时,开发人员首先需要创建一个窗体类,窗体类是应用程序的主要界面。然后,通过在窗体类中添加控件并编写事件处理程序,可以实现用户界面和交互逻辑。 WinForms使用面向对象的编程模式,开发人员可以通过继承窗体类和控件类来创建自定义控件,并重写各种方法以实现特定的行为。 总之,WinForms是一个功能强大且易于使用的框架,它与C#编程语言紧密结合,可以帮助开发人员快速构建Windows桌面应用程序。无论是个人开发者还是企业开发人员,都可以通过学习和使用WinForms来实现他们的应用程序开发需求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值