mik*_*may 7 .net excel interop com-interop .net-4.0
我构建了一个引用COM互操作DLL的程序集.如果我通过在Reference的属性(VS2010)中将Embed Interop Types设置为True来嵌入COM互操作类型,则在运行时会发生错误"对象不包含get_Range的定义".如果未嵌入COM互操作类型,则不会发生错误.
有谁知道为什么一个特定的方法,Worksheet.get_Range应该被省略或如何解决这个或有任何其他相关的见解?我应该感激任何帮助.
interop dll包含对Worksheet.get_Range(object,[object])的引用.在我的调用程序集中使用反射器,在工作表下没有提到get_Range.
我嵌入的互操作程序集是从Excel9.olb生成的.我没有使用PIA,因为该应用程序针对多个Excel版本.
Mik*_*lum 10
我自己还没有尝试过这个,但是我相信在C#4.0下使用嵌入式COM Interop类型时,语法已经改变了更多的"C#友好"语法.
因此,get_Range(object, [object])您可以省略可选参数(而不是必须提供Type.Missing),而不是查找方法,或者您可以避免完全调用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"];
Run Code Online (Sandbox Code Playgroud)
但是,根据我的理解,你仍然可以称之为"旧方式",新的索引器语法实际上是在幕后调用所需的'get'和'set'访问器,所以我真的不知道你为什么遇到麻烦.我的猜测是你需要查看Worksheet.Range而不是Worksheet.get_Range在IntelliSense列表中.如果这对您不起作用,那么您的设置或安装可能会出现问题.
有关详细信息,请参阅:Kirill Osenkov 在C#4.0中的索引属性.
希望这可以帮助...
麦克风