.net - 当互操作程序集嵌入到 .NET 4.0 中时,Excel get_Range 丢失

标签 .net excel interop .net-4.0 com-interop

我构建了一个引用 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/

相关文章:

.net - PowerShell 找不到过载

c# - .NET StringBuilder 前加一行

php - Laravel-Excel 导出的 Excel 工作表不会将列中的日期值转换为日期

vb.net - 按行 NUMBER 和列 LETTER 获取 Excel 单元格

c# - 如何在 UWP 应用程序中创建 COM 对象? (C#)

.net - IronRuby 是否正在积极开发中?

.net - OpenID 是不是太复杂了?

excel - 检查一列中的一个值是否在另一列中

vba - Find和FindNext复制所有匹配对应的数据

c++ - 来自变量的模板类型