我的任务是在Excel中创建一个可以从一些自定义函数/宏中受益的财务规划工具。
我最初的反应是使用VBA。我之前用它来驱动Excel(比如5年前)。但后来我开始怀疑我是否会更好地使用VSTO。
有没有人有使用这两种技术的经验,可以列出优点和缺点,以便我可以评估哪种课程最好。
答案 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)在两个方面非常有用:
通过拖放设计器为加载项创建自定义功能区排列。如果没有拖放式设计器,则必须提供XML。如果你问我,XML就好了,但拖放式设计师确实是一个使用的梦想
在工作表上使用.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可见方法。
正如我所看到的,这些是基本的专业和骗局。如果您需要了解更多,请告诉我。
- 迈克
答案 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。有很多原因,但主要因素是:
但是,VBA显然不受到非常保护,所以如果你有隐藏的代码,最好配合.Net probobly。