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

时间:2010-03-22 03:14:04

标签: .net excel vba

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

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

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

5 个答案:

答案 0 :(得分:8)

我建议您坚持使用VBA进行Excel标准开发,并在此方面学习.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。

(有关此问题的其他类似意见,请参阅Do I lose the benefits of macro recording if I develop Excel apps in Visual Studio?。)

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

  

部署,调试等问题   和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。

  3. 不幸的是,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可见方法。

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

    - 迈克

答案 1 :(得分:4)

鉴于您对C#的熟悉,我建议您查看Addin Express(费用)和Excel DNA(免费)以及VSTO。 Addin Express具有版本中立的PIA,可简化部署,可处理功能和命令,并可使用自动化和XLL接口(XLL比自动化快得多)。 Excel DNA针对XLL界面进行了更优化,但非常适合开发工作表函数。

免责声明:我与Addin Express或Excel DNA无任何联系

答案 2 :(得分:2)

我认为在Excel中的VBA中编码时不存在任何内在错误。它具有在excel的进程空间中运行的优点,并且与Excels对象模型的VBA交互非常简单。但是,您(以及您的用户)需要将您的工具真正视为Excel加载项。

如果您希望工具具有与Excel不同的标识,则可以选择自动化。它有点慢(你处于“过程中”)并且对象模型稍微不那么干净,但你的工具将拥有它自己的身份。

(请注意,如果您使用C#,如果您有使用VS2010和C#4的选项,那么有一些自动增强功能值得升级)

答案 3 :(得分:0)

SpreadsheetGear for .NET允许您将Excel兼容的电子表格组件添加到.NET(WinForms,ASP.NET等)应用程序中,而没有COM Interop的缺点(性能,易用性)。

您可以详细了解SpreadsheetGear Windows窗体电子表格控件here,查看实时ASP.NET示例here并下载免费试用here,如果您想自己试用。< / p>

免责声明:我拥有SpreadsheetGear LLC

答案 4 :(得分:0)

这里有很多很棒的答案,所以我会尝试提出一个尚未提出的观点。我会坚持使用VBA。有很多原因,但主要因素是:

  • 不要求客户端有任何指定的版本。 .Net已安装

但是,VBA显然受到非常保护,所以如果你有隐藏的代码,最好配合.Net probobly。