我构建了一个引用 COM 互操作 DLL 的程序集。如果我通过在引用的属性 (VS2010) 中将嵌入互操作类型设置为 True 来嵌入 COM 互操作类型,则在运行时会出现错误“对象不包含 get_Range 的定义”。如果未嵌入 COM 互操作类型,则不会发生错误。
有谁知道为什么应该省略特定方法 Worksheet.get_Range 或如何解决此问题或有任何其他相关见解?我应该感谢任何帮助。
互操作 DLL 包含对 Worksheet.get_Range(object, [object]) 的引用。在我的调用程序集上使用反射器时,工作表下没有提及 get_Range。
我嵌入的互操作程序集是从 Excel9.olb 生成的。我没有使用 PIA,因为该应用程序面向多个 Excel 版本。
最佳答案
我自己还没有尝试过这一点,但我相信在 C# 4.0 下使用嵌入式 COM 互操作类型时,语法已更改为更“C# 友好”的语法。
因此,您可以省略可选参数(而不是必须提供 Type.Missing
),而不是寻找 get_Range(object, [object])
方法),或者您可以完全避免调用 get 访问器,而是使用方括号引用属性名称:
// Using C# 3.0:
Excel.Range range = worksheet.get_Range("A1", Type.Missing);
// Using C# 4.0, omitting the optional parameter:
Excel.Range range = worksheet.get_Range("A1");
// Using C# 4.0, utilizing square-bracket indexing:
Excel.Range range = worksheet.Range["A1"];
但据我了解,您仍然应该能够将其称为“旧方式”,其中新的索引器语法实际上是在幕后调用所需的“get”和“set”访问器,所以我不这样做我真的不知道你为什么遇到麻烦。我的猜测是,您需要在 IntelliSense 列表中查看 Worksheet.Range
而不是 Worksheet.get_Range
。如果这对您不起作用,那么听起来您的设置或安装可能有问题。
有关此内容的更多信息,请参阅:Indexed Properties in C# 4.0作者:基里尔·奥先科夫。
希望这有帮助...
迈克
关于.net - 当互操作程序集嵌入到 .NET 4.0 中时,Excel get_Range 丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2192977/