2010-09-08 73 views
0

大家好,为什么这个代码在C#(Excel的自动化问题)

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

最后几天,我被赋予的责任,以自动化的Microsoft Excel中的自动化任务。由于截止时间太短,所以我没有去“阅读手册,做”的风格....我直接在谷歌搜索,找到了一些代码段和使用这些。

的代码非常完美,它代替了我们的9小时工作量3.2分钟仅....我已成功地通过收集任务,但今天,当我离开办公自动化较深层次的知识,我想挖详细了解由于直接复制+使用谷歌而错过的代码。

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


using Excel = Microsoft.Office.Interop.Excel; 

Excel.Application application; 

application= new Excel.Application(); 

这里应用是一个接口..........那么如何在地球上我的实例接口?我找不出解决方案。这真的让我很难过。

接口不能被实例化......那么,为什么这个代码工作???有谁知道 ???

任何答复都会被满足。

回答

4

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

application= new Excel.Application(); 

真正能拿到翻译成

application= new Excel.ApplicationClass(); 

ApplicationClass是已被装饰互操作简单的.NET类属性,以便所有的呼叫(包括建筑)将被转发到实际的COM组件。通常会创建互操作程序集来导入COM组件的类型库。有关com类型如何映射到.NET类型的更多信息,请参阅this文章。

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