c#系统.访问Excel文件时返回__ComObject

本文关键字:返回 ComObject 文件 系统 访问 Excel | 更新日期: 2023-09-27 18:15:14

我试图通过下面的代码访问Excel文件:

Microsoft.Office.Interop.Excel.Application ObjExcel
  = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook book;
Microsoft.Office.Interop.Excel.Worksheet sheet;
Excel.Range range1 = null, range2 = null;
CultureInfo ci = new CultureInfo("en-US");
Thread thisThread = Thread.CurrentThread;
thisThread.CurrentCulture = new CultureInfo("en-US");
book = ObjExcel.Workbooks.Open(LinguisticInstructionsFileName);

book变量的最后一行内容是System.__ComObject,而在不同的应用程序代码中工作,变量是...Excel.WorkbookClass

所以我想问一下这种奇怪行为的原因是什么。我已经试着给工作手册打电话了。打开额外的Missing。

c#系统.访问Excel文件时返回__ComObject

。. COM实现使用代理对象,这些代理在内部生成并派生自System。__ComObject所以这是一个正常的行为。它们是一种"动态对象"。你可以将__ComObject强制转换为你需要的接口或类。你可以将它强制转换为WorkbookClass,没有问题。

这完全取决于你如何获得实例…如果用new创建对象,例如new WorkbookClass, c#将直接创建强类型对象。相反,如果对象从COM函数或属性返回,它通常返回__ComObject,这是因为__ComObject几乎可以是任何东西,可以被强制转换为几个接口,当然c#不知道该返回什么,所以它返回这种特殊的"动态"对象。这些对象被称为RCW,即Runtime Callable Wrapper。

一个不错的阅读可以是http://www.codeproject.com/KB/cs/cominteropnet.aspx