Dot-Net

.NET 4.0 中嵌入互操作程序集時缺少 Excel get_Range

  • May 10, 2010

我建構了一個引用 COM 互操作 DLL 的程序集。如果我通過在 Reference 的屬性 (VS2010) 中將 Embed Interop Types 設置為 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# 友好”的語法。

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"];

但是,據我了解,您仍然應該可以將其稱為“舊方式”,其中新的索引器語法實際上是在幕後呼叫所需的“get”和“set”訪問器,所以我真的不知道為什麼你有麻煩。我的猜測是您需要查看Worksheet.Range而不是Worksheet.get_Range在 IntelliSense 列表中查看。如果這對您不起作用,那麼聽起來您的設置或安裝可能有問題。

有關這方面的更多資訊,請參閱:Kirill Osenkov的 C# 4.0 中的索引屬性。

希望這可以幫助…

麥克風

引用自:https://stackoverflow.com/questions/2192977