gpt4 book ai didi

C# System.__访问Excel文件时返回ComObject

转载 作者:行者123 更新时间:2023-11-30 17:15:05 24 4
gpt4 key购买 nike

我正在尝试通过以下代码访问 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.Value 参数调用 Workbooks.Open,但结果是一样的。

最佳答案

.NET COM 实现使用代理对象,这些代理在内部生成并从 System.__ComObject 派生,因此这是正常行为。它们是一种“动态对象”。您可以将 __ComObject 强制转换为您需要的接口(interface)或类。您可以毫无问题地将其转换为 WorkbookClass。

这完全取决于您如何获取实例...如果您使用 new 创建对象,例如 new WorkbookClass,C# 将直接创建强类型对象。相反,如果对象是从 COM 函数或属性返回的,它通常返回一个 __ComObject,这是因为 __ComObject 几乎可以是任何东西,并且可以转换为多个接口(interface),当然 C# 不知道要返回什么,所以它返回这个特殊的一种“动态”对象。这些对象称为 RCW,代表 Runtime Callable Wrapper。

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

关于C# System.__访问Excel文件时返回ComObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8211752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com