4

每次看到office Automation using.NET的例子,使用的语言都是VB.NET。

这是因为最初只能在宏中使用 VB 脚本来实现 Excel 等 Office 应用程序的自动化,而编写这些宏的人自然倾向于使用 VB.NET,还是有理由不将 C# 用于 Office 自动化?

似乎我可以从 C# 中实例化 Excel 类,就像我在 VB.NET 中使用 CreateObject 一样。

excel = Type.GetTypeFromProgID("Excel.Application");

如果您必须使用 Excel 自动化编写 .NET 程序,您会使用什么语言,除了可能有 VB.NET 示例之外,还有什么理由避免使用 C#?

编辑:

我正在考虑使用对 Microsoft Excel 对象库的显式引用和 Excel 类 Application 对象的显式实例化来编写代码,然后在对程序进行基本测试后,修改代码以使用后期绑定以允许应用程序运行不同版本的 Excel。

代码会完全不同吗?

例如,使用早期绑定我可以做到这一点......

var excel2  = new Microsoft.Office.Interop.Excel.Application();
excel2.Visible = true;

在后期投标中,我会被迫使用完全不同的代码吗?

excel = Type.GetTypeFromProgID("Excel.Application");
excel.InvokeMember("Visible", BindingFlags.SetProperty, null, excelObject, parameter);
4

1 回答 1

4

尽管有更多可用于 VB.NET 的代码示例,但我都成功地使用了这两种方法。

我可以立即想到的一个区别是 API 方法似乎包含大量可选方法参数,这些参数在 C# < 4 中不存在,因此您会发现自己在做类似的事情:

object missing = Type.Missing;
Excel.Application xl = new Excel.Application();
xl.Workbooks.Open(fileName, 0, true, 5, "", "", true, 
            Excel.XlPlatform.xlWindows, missing, missing, missing, 
            missing, missing, missing, missing);

而不仅仅是在 VB.NET 中:

Dim xl As New Excel.Application()
xl.Workbooks.Open(fileName, 0, True, 5, "", "", true, Excel.XlPlatform.xlWindows)

VB.NET 提供的一些语法糖与编写使用 OLE 自动化库或互操作程序集的应用程序的简洁性大相径庭。

编辑:至于早期绑定和后期绑定,我不能说我对后期绑定有任何经验。本文讨论了一种为办公应用程序的多个版本安全地实现后期绑定的方法。

引用文章

...您可以使用最高版本的 Office 应用程序的互操作开始开发您的加载项。完成此操作后,您可以将对此 Office 版本中引入的功能的早期绑定调用替换为后期绑定调用,并确保这些调用正常工作。然后,您可以将项目引用的互操作程序集替换为应用程序先前版本的互操作程序,并重复该过程。一种重构。这种方法是否有用,由你决定

于 2012-09-11T18:25:37.807 回答