惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
aimingoo的专栏
aimingoo的专栏
S
SegmentFault 最新的问题
A
About on SuperTechFans
Engineering at Meta
Engineering at Meta
宝玉的分享
宝玉的分享
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 叶小钗
WordPress大学
WordPress大学
N
Netflix TechBlog - Medium
MyScale Blog
MyScale Blog
Stack Overflow Blog
Stack Overflow Blog
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 聂微东
M
MIT News - Artificial intelligence
F
Fortinet All Blogs
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Blog — PlanetScale
Blog — PlanetScale
T
Tailwind CSS Blog
Recent Announcements
Recent Announcements
Jina AI
Jina AI
大猫的无限游戏
大猫的无限游戏
Apple Machine Learning Research
Apple Machine Learning Research
J
Java Code Geeks

博客园 - 咖啡色

拆解 Claude Code 源码:如何用软件工程思维约束 AI? 为什么要在.Net Core中使用MediatR library? Let’s Encrypt 项目计划自动化地提供免费的 CA 证书 论C#逼格手册 这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑) Entity Framework where语句起作用的真正用法 ASP.NET Page_Load执行两次 .NET:在ASPX、ASHX和MVC中使用IOC容器(菜鸟必看) [转]SqlServer 表分区详细介绍 HttpPostedFileBase always null when upload file by asp.net mvc4 mobile 一步步构建大型网站架构 TCP/IP网络协议的通俗理解,socket,http,soap。 精妙Sql语句备忘 解决.net绘制的 WinForm 在 windows7下变形的方法 关于 ASP.net + JQuery + JQGrid + JSON.net 的简单应用(一) Entity Framework 连接 mysql 5.0出现的问题及解决方案 如何使用缓存提高程序性能 如何用Javascript写一个Class? 程序员装逼指南(网上看到的,笑喷了……)
VSTO开发中VS2010和Office 2003的问题及解决方案
咖啡色 · 2012-02-10 · via 博客园 - 咖啡色

因为公司需要,将以前的VSTO项目升级为Net4.0环境,用VS2010开发,结果悲剧了,VS2010的VSTO不支持Office2003,Google了一番,在博客园找到这篇文章,VSTO开发中VS2010和Office 2003的问题,明确说明Office2003已经不被支持,建议升级到Office07或10。不过如果想继续兼容Office2003,文中给出了另外两种方法:使用Extensibility建立插件或者使用COM Shim Wizards辅助托管程序的开发。

本文则成功实现Extensibility建立插件的方法,供大家参考。

1 添加Extebsibility的引用

首先用VS2010新建一个Class Library的项目,Framework设置为4.0,然后添加Extensibility的引用,


现在可以去代码中引用命名空间using Extensibility了。

using System;
using Extensibility;
using System.Runtime.InteropServices;
using Office = Microsoft.Office.Core; 

 2 设置Guid和ProgId

如下所示设置好Guid和ProgId,这个有点类似Com接口。

[GuidAttribute("2752EB47-5BC9-4F67-853C-E7A9E35B0FF9"), ProgId("ATSExcelAddIn.Connect")]
public class Connect : Object, Extensibility.IDTExtensibility2

Guid可以用VS的Guid工具辅助生成;ProgId就是程序名+类名称。

 

3 实现IDTExtensibility2接口

让你的Class继承自Object,因为Object是Net所有Type的基类,然后实现IDTExtensibility2接口,主要有以下几个函数:

public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
public void OnDisconnection(Extensibility.ext_DisconnectMode disconnectMode, ref System.Array custom)
public void OnAddInsUpdate(ref System.Array custom)
public void OnStartupComplete(ref System.Array custom)
public void OnBeginShutdown(ref System.Array custom)

我们的代码主要放在OnConnection函数中,如:

public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
{
            applicationObject = application;
            addInInstance = addInInst;

            this.appExcel = (Excel.Application)application;
            System.Diagnostics.Debug.WriteLine("ATSAddIn.OnConnection: App is {0}"this.appExcel.ActiveWorkbook.FullName);
            menuBar = this.appExcel.CommandBars.ActiveMenuBar;
            menuATS32 =
                (Office.CommandBarPopup)menuBar.Controls.Add(Type: Office.MsoControlType.msoControlPopup, Temporary: true);
            menuATS32.Caption = "&Mytest";

4 添加安装项目

因为这是一个Dll项目,不能像VSTO项目那样直接F5加载到Excel中调试,我们需要添加一个Setup项目,然后使用Install来注册到Excel的插件中。

 

 

5 安装,预览效果 

打开Excel2003,现在已经可以在菜单上看见我们的程序了。 

分享完毕,感谢大家的阅读。