2009-02-11 70 views
8

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

我现在可以在.XLS只启动Excel工作表通过双击并没有在我的床单运转用我所有的C#代码,我放弃了片上等

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

回答

7

根据this(感谢PintSizedCat)为Excel 2003会发生以下情况:

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

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

AddinLoader.dll加载.NET 框架和 办公室启动运行Visual Studio工具的管理 部分。

在Visual Studio Tools for Office中 运行时创建一个应用程序域, 组策略应用程序域 不信任我的电脑区,和 检查代码访问安全策略 店里找了 政策定制组装。

.NET Framework验证程序 针对策略提供的证据 。如果失败,则会引发 错误。如果通过,则 过程继续。

如果自定义使用部署 清单,为 办公室运行时使用它来检查 组件更新的Visual Studio工具。如果有必要更新 ,那么现在就执行它们。

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

在Visual Studio Tools for Office中 运行时调用您的自定义 装配Startup事件 处理程序。有关详细信息,请参阅 用于Office项目的Visual Studio工具 事件。

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

_AssemblyName,值= * _AssemblyLocation,值= {533b2c13-a125-418a-BFFF-9546b0762807}

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

5

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

你有VSTO的安装项目吗?在那里你可以看到设置的注册表键,但是安装程序也会/也应该在GAC中注册VSTO(尽管不要拿我的话来说,因为我对VSTO有点像Shakey一样)。

希望这会有所帮助,我会尽力为您找到更多信息。

编辑 你应该尝试阅读下面的http://msdn.microsoft.com/en-us/library/bb386298.aspx,它会给你一个插件的解释。它实际上只是一个从注册表中加载的COM主机的封装器,VSTO使用一些Interoparability代码进行对话。

还有用的是http://msdn.microsoft.com/en-us/library/23cw517s.aspx(Visual Studio Tools for Office入门,不要因为它说入门,因为它有很多有用的信息)和http://msdn.microsoft.com/en-us/library/hy7c6z9k.aspx(从第一个链接,并且是VSTO Addins的概述)。

+0

我看了一下reg密钥,并且没有为我的VSTO .Net项目(那里有一个'Addins'子目录以及其他2个插件)。我还没有VSTO的安装项目。 – ng5000 2009-02-11 10:12:12