Excel VSTO如何工作?

时间:2009-02-11 09:43:58

标签: c# excel vsto clr-hosting

Excel VSTO如何工作?如果我在Visual Studio 2005中创建Excel工作簿解决方案,那么我可以愉快地编写代码,完全访问Excel对象模型,甚至将Excel工作表视为设计图面。当我构建解决方案时,我得到一个.XLS文件和一个.DLL(包含我的C#代码)。

我现在可以通过双击.XLS来启动Excel工作表,并且我的工作表上有我所有的C#代码以及我在工作表上删除的任何控件等。

表格如何引用.DLL? excel工作簿/表的哪一部分告诉它需要启动CLR并托管我的程序集?

2 个答案:

答案 0 :(得分:7)

根据{2003}的this(感谢PintSizedCat),会发生以下情况:

  

Microsoft Office应用程序   检查自定义文档属性   看是否有托管代码   与...相关的扩展   文献。有关更多信息,请参阅   自定义文档属性概述。

     

如果有托管代码扩展,   该应用程序加载AddinLoader.dll。   这是一个非托管DLL   Visual Studio的加载程序组件   2005 Office第二版工具   运行。有关更多信息,请参阅   用于Office运行时的Visual Studio工具   概述

     

AddinLoader.dll加载.NET   框架并启动托管   Visual Studio Tools的一部分   Office运行时。

     

适用于Office的Visual Studio工具   运行时创建应用程序域,   为应用程序域设置策略   不相信我的电脑区,和   检查代码访问安全策略   商店找到一个政策   定制装配。

     

.NET Framework验证了   大会提出的证据   违反政策。如果它失败了,一个   提出错误。如果它通过了,   过程继续。

     

如果自定义使用部署   清单,Visual Studio工具   Office运行时使用它来检查   装配更新。如果有任何更新   必要的,他们现在执行。

     

适用于Office的Visual Studio工具   运行时将程序集加载到   应用领域。

     

适用于Office的Visual Studio工具   运行时调用Startup事件   自定义中的处理程序   部件。有关更多信息,请参阅   用于Office Project的Visual Studio工具   事件

在我的测试项目的Excel工作簿中,我有两个自定义属性:

_AssemblyName,value = *  _AssemblyLocation,value = {533b2c13-a125-418a-bfff-9546b0762807}

我认为这些是将VSTO运行时指向程序集的属性。

答案 1 :(得分:6)

这一切都在注册表中完成,您应该能够在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Excel或您的equivelant应用程序中找到密钥。我有更多使用COM Addins的经验,这些经验也在注册表中的其他地方注册。该密钥下面应该有一个LoadBehaviour项,用于确定应用程序的加载方式(2是手动加载,3是启动时自动加载)。

您的VSTO有安装项目吗?在那里,你可以看到设置的注册表项,但是安装程序将/应该在GAC中注册VSTO(虽然我不会接受我的话,因为我对VSTO有点像我说的那样)。 / p>

希望这有帮助,我会尝试为您找到更多信息。

编辑 您应该尝试阅读以下http://msdn.microsoft.com/en-us/library/bb386298.aspx,它将为您解释插件的含义。它实际上只是一个COM主机的包装器,它从注册表中加载,VSTO使用一些Interoparability代码与之对话。

同样有用的是http://msdn.microsoft.com/en-us/library/23cw517s.aspx(适用于Office的Visual Studio工具入门,请不要敲它,因为它说明了入门,其中有很多有用的信息)和http://msdn.microsoft.com/en-us/library/hy7c6z9k.aspx(其中是从第一个链接,是VSTO Addins的概述。