之前个人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

使用C#开发Excel插件相关推荐

  1. 使用c++开发excel插件 (第3章动态链接库(dynamic-link library))

    1.为什么要讲动态链接库,它和excel插件有什么关系. 2.什么是动态链接库,它们都有哪几类. 动态链接库和普通exe应用程序有什么区别. 3.如何编写动态链接库. 3.1.如何声明函数 3.2.如 ...

  2. 使用c++开发excel插件(第4章编写一个完整的xll)

    1.认识xll 2.通过宏加载工具手动加载xll 3.创建自动加载宏xll 4.xll加载过程 5.主要函数介绍 6.编写完整的xll 1. 认识xll Xll是一个标准的win32 dll,但它导出 ...

  3. 浅谈C/C++ 开发Excel插件之操作excel

    想在加载项中访问并操作Excel,需要在stdafx.h中加入如下语句,注意实际路径和本机安装Office的路径相关 #import "C:\\Program Files (x86)\\Co ...

  4. 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第12波-快速生成、读取、导出条形码二维码...

    根据指定的内容生成对应的条形码或二维码,在如今移动互联网时代,并不是一件什么新鲜事,随便百度一下,都能找到好多的软件或在线网站可以帮我们做到,但细想一下,如果很偶然地只是生成一个两这样的图形,百度一下 ...

  5. 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第13波-一键生成带图片自由报表...

    在Excel的世界中,因着Excel的灵活性,觉得广大用户喜欢(一般的系统都是中规中矩,用户没法对它进行半点改变),例如可以用来做简历模板.员工信息标签.员工工资条.任意的多行多列合并单元格形成自己最 ...

  6. 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第10波-快速排列工作表图形对象...

    在Excel里插入图片,和对图形(图表.切片器.图片.形状.SmartArt等)进行排版,这些在日常工作中都少不了的,如果对这些操作只是偶尔几张图片.几个图形,手工弄一下,倒也可接受,但一旦要处理的数 ...

  7. 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第11波-快速批量插入图片...

    Excel自带插入图片功能,但操作步骤繁琐,插入图片后,还要一张张图片归位,插入的图片一般是用于可视化某些商品条码,增强阅读性.即一般会在商品条码旁边存放对应的图片,这些工作若用Excel自带的功能, ...

  8. 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第9波-数据透视表自动设置...

    对于数据分析工作者和深度Excel用户来说,数据透视表的使用频率之高是毋庸置疑的.透视表可谓投入少产出大,给它数据源,最终就可以轻松地得到想要的数据汇总.报表.结合数据透视图.条件格式等可视化方式,快 ...

  9. 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第15波-接入AI人工智能NLP自然语言处理...

    上回提到现在是概念化时代,马云爸爸们天天演讲各样的概念,IT世界也在讲ABC时代(A-AI人工智能,B-BigData大数据,C-Cloud Computing云计算),在2017年,大把大佬们都大谈 ...

  10. Excel催化剂开源第32波-VSTO开发的插件让WPS顺利调用的方法-注册表增加注册信息...

    VSTO插件开发完成后,鉴于现在WPS用户也不少,很多时候用户没办法用OFFICE软件,只能在WPS环境下办公,VSTO开发的插件,只需增加一句注册表信息,即可让WPS识别到并调用VSTO开发的功能, ...

最新文章

  1. Java调用cmd命令 打开一个站点
  2. iOS开发-NSString去掉所有换行及空格
  3. 如何让普通进程获得 root 的洪荒之力?
  4. 机器学习资料推荐 URL
  5. CSP认证201604-3 路径解析[C++题解]:字符串处理、模拟、vector切分字符串
  6. J.R.R.托尔金笔下的中土世界与《斗破苍穹》项目实践:从世界观解构入手场景设计
  7. 雪妖现世:给SAP Fiori Launchpad增添雪花纷飞的效果
  8. OCR系列——文本检测任务
  9. ASP.NET案例--新闻模块设计
  10. 异构GoldenGate 12c 单向复制配置
  11. python名片管理系统2.0_Python:名片管理系统2.0(增加登录功能)
  12. Why do people love certain websites and web products?
  13. Ninth season sixteenth episode,Monica is gonna do a boob job???bigger?????
  14. open-能连接,但无法访问内网的问题
  15. 如何拉取钉钉的外出、出差审批单
  16. windows android ios,如何将你的Android / iOS设备连接到Windows 10
  17. 批处理之读写ini配置文件
  18. 【系统分析师之路】2014年系统分析师上午综合知识真题
  19. 微信小程序账号长时间未登录冻结解封
  20. docker私有仓库harbor使用域名登录并push镜像

热门文章

  1. 华为手机企业邮箱无法连接到服务器,华为手机邮箱无法登录
  2. 概率逗号分号_分号的用法 和逗号的区别
  3. Linux系统的上行和下行带宽的检测
  4. 国产计算机存储,全国产化存储AXD嵌入式存储芯片在全国产化计算机适配应用AXD安信达-国内领先的自主可控存储提供商...
  5. 利用极域电子教室控制别人电脑
  6. 英伟达发布《永劫无间》最新显卡驱动更新,驱动人生升级教程
  7. 如何取得AS400访问,一窥究竟
  8. nii、npz、npy、dcm、mhd 的数据互转处理,及多目标分割处理汇总
  9. 【VMware】NAT模式、桥接模式、仅主机模式
  10. 中兴F450电信光猫改桥接模式