C#Excel COM加载项的devise结构

我正在构buildExcel 2007+的COM加载项,这将是一个应用程序的意义在于:

  • 它在function区上有自己的选项卡,并带有控制其操作的button(如“创build新计划工作簿”/“刷新工作簿”等)
  • 它会从Excel(“应用程序”和“工作簿”)中捕捉事件并对其执行操作。
  • 它应该有一个基于上下文的任务窗格,并将从我的插件发送给它的数据。

为了支持这一点,我想以这样一种方式来构build代码,以便我将来可以很容易地对其进行修改(例如,在function区上添加一个新button),而不是到处都有意大利面条。

我最初的想法是创build一个单独的类,这将是我的“Addin应用程序”,并初始化与Excel应用程序本身,例如:

public class Connect : Extensibility.IDTExtensibility2 { private Excel.Application _excelApplication; private MyAddinApplication _myAddinApplication; public void OnConnection(Object application,...) { _excelApplication = (Excel.Application)application; _myAddinApplication = new MyAddinApplication(_excelApplication); } } 

这个MyAddinApplication类将会捕获Excel的事件(比如打开一个工作簿,closures等),然后相应地处理它们。 它还会捕获任何Ribbon事件或callback,然后根据命令模式触发操作。

我的问题是,这是一个Excel COM插件的合理方法? 将Excel应用程序封装在由“Addin Application”类引用的单独的“事件处理程序”类中会更好吗? 我没有真正看到我的研究中的复杂COM插件,只有那些有一个或两个button或不捕捉任何事件。

这是一个(更复杂一点)Excel插件,你可以看看。 作者描述了他如何将他的解决scheme组织到不同的项目中,我同意他的大部分决定。 他将领域逻辑从用户界面/ excel中分离出来,并添加了unit testing项目和一个引导他整个插件的项目:

http://www.clear-lines.com/blog/post/VSTO-solution-organization.aspx

源代码可在这里find: http : //vstostocks.codeplex.com/

这是一个VSTO解决scheme,但您可以轻松地将相同的原则应用于普通的COM插件。 它也非常类似于你的项目。

不知道你的具体问题就很难给出指导方针。 我认为,如果你坚持主要的指导方针,就像SOLID这样的OOdevise,编写干净的代码,你应该没问题。