使用VBA与.Net自动化Excel的优点和缺点

And*_*ndy 13 .net excel vba

我的任务是在Excel中创建一个可以从一些自定义函数/宏中受益的财务规划工具.

我最初的反应是使用VBA.我之前用它来驱动Excel(比如5年前).但我开始怀疑我是否会更好地使用VSTO.

有没有人有使用这两种技术的经验,可以列出优点和缺点,以便我可以评估哪种方法最好.

Mik*_*lum 8

我建议您坚持使用VBA进行标准开发,并在此方面学习.NET.使用.NET绝对是下一步,但它使您的Excel开发更加困难.

此外,VSTO不支持创建用户定义的工作表函数("UDF"),因此您需要VBA前端,或者在不使用VSTO的情况下创建托管COM加载项,以便执行此操作.相比之下,VBA允许您几乎不费力地创建UDF.

使用.NET有许多优点,主要是关于强类型,完整的OOP功能以及组织大型项目的能力.但是在部署时,VBA比.NET具有巨大的优势,在处理.NET或VSTO时,Excel非常复杂.VBA也是一种更容易学习和开始的语言.

总的来说,我建议您使用VBA进行日常开发,但是学习VB.NET或C#,这样您的编程技能就可以在Excel领域之外发展.最终,你的.NET技能可以变得足够强大,以便你更愿意在VBA上使用它,但是你将不得不在未来的那一天变得非常擅长.NET.

(对于另一个类似的观点,如果我在Visual Studio中开发Excel应用程序,请参阅宏录制的好处吗?)

编辑:有关安迪评论的更新,如下:

部署,调试和UDF等问题是我在寻找比较信息的问题.从对这个问题的回答来看,我应该提到我有5年以上的C#经验,而我的VBA技能(或缺乏技能)只能在十年内出现3到4次

好的,是的,你应该说!大多数有这样问题的人都是想要进入.NET的VBA程序员.所以我误解了.

在您的情况下,您应该使用C#,但我强烈建议在Visual Studio 2010上使用C#4.0,这将极大地改善对COM对象模型(如Excel)进行操作时所需的语法.VS 2010目前处于测试阶段2,RTM日期定在4月12日,所以我们几乎就在那里.

至于部署,根据您的经验,我不认为您在安装程序包等方面会遇到太多麻烦,Visual Studio Tools for Office(VSTO)在两个方面非常有用:

  1. 通过拖放设计器为加载项创建自定义功能区排列.如果没有拖放式设计器,则必须提供XML.如果你问我,XML就好了,但拖放设计师确实是一个梦想

  2. 在工作表上使用.NET控件.我不知道这是否是您计划进行的操作的一部分,但VSTO允许在工作表上使用.NET控件.对于.NET程序员来说,这是一个非常好的功能,因为这些控件看起来更平滑,专门用于.NET.

遗憾的是,VSTO仅适用于Excel 2003及更高版本,我认为您必须为Excel 2003和Excel 2007创建单独的加载项.另一方面,不使用VSTO而制作的托管COM加载项可以与Excel兼容2000年及以上没有任何困难.最后,VSTO不支持创建UDF,因此,您必须为此创建托管自动化加载项,或者使用调用VSTO功能的VBA前端.

总的来说,如果您可以限制自己使用Excel 2007及更高版本,我会选择VSTO.如果您的要求适用于Excel 2003及更高版本,我会考虑VSTO.如果您需要能够在Excel 2000及更高版本上运行,我会使用托管COM加载项.

对于UDF支持,我将创建一个托管自动化加载项,这对于Excel 2002及更高版本是可行的.如果您需要在Excel 2000或更低版本上使用UDF,那么您需要一个VBA前端,它在.NET程序集中调用COM可见方法.

正如我所看到的,这些是基本的专业和骗局.如果您需要了解更多,请告诉我.

- 迈克