.NET 4.0 中嵌入互操作程序集時缺少 Excel get_Range
我建構了一個引用 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 中的索引屬性。
希望這可以幫助…
麥克風