为什么这段代码在c#中工作(Excel自动化问题)

时间:2010-09-08 08:44:38

标签: c# excel

大家好,

Atfirst让我告诉你,我不认为我是一个非常糟糕的程序员。是的,我不是一个极端的编码器,但我可以编写足够的代码来使系统正常工作。

最近几天,我被赋予了自动化Microsoft Excel自动化任务的责任。由于截止日期太短,所以我没有去“阅读手册 - 做工作”风格....我直接在谷歌搜索,找到了一些代码段并使用了它们。

代码完美无缺,它仅用3.2分钟就取代了我们的9小时工作量....我已经设法通过任务收集了相对深层次的办公自动化知识,但今天当我离开时,我试图挖掘出来有关我因为直接复制+使用谷歌而错过的代码的详细信息。

第一行产生了所有问题......它是:


using Excel = Microsoft.Office.Interop.Excel;

Excel.Application application;

application= new Excel.Application();

这里应用程序是一个接口..........然后我如何实例化一个接口???我无法弄清楚解决方案。这真的杀了我。

接口无法实例化...那么为什么这段代码可以工作?有谁知道 ???

任何回复都会受到欢迎。

1 个答案:

答案 0 :(得分:4)

Excel.Application接口在inter-op程序集中声明。如果看到它的定义,接口将使用GUID和CoClass属性(CoClass(typeof(ApplicationClass)))进行修饰。由于这个属性,代码行

application= new Excel.Application();

实际上会被翻译成

application= new Excel.ApplicationClass();

ApplicationClass是一个简单的.NET类,它使用互操作属性进行修饰,以便所有调用(包括构造)都转发到实际的COM组件。通常会创建Interop程序集,导入COM组件的类型库。有关如何将com类型映射到.NET类型的更多信息,请参阅this文章。

编辑:只是做了一点谷歌搜索以获取额外信息以包含在帖子中并在SO上遇到same question。特别要检查Eric Lippert的答案,他解释了在接口上使用新运算符时编译器的逻辑。