2012-09-29 91 views
6

在我的C#程序中,我使用Excel 2010 interop程序集。有了這個,我正在讀取&將數據寫入excel文件。在開發框(包含Office 2010)上執行得很好。在客戶端計算機上,即使他們具有Office 2010和Office PIA,也會看到下面的異常,並引發WriteToExcel()方法調用。Excel interop MissingMethodException

Unhandled Exception: System.MissingMethodException: Method not found: 'System.Type System.Runtime.InteropServices.Marshal.GetTypeFromCLSID(System.GUID)'. 

下面是我的代碼片段。

[STAThread] 
static void Main(string[] args){ 

     // read user input, process and write data to Excel 
     WriteToExcel(); 
} 

[STAThread] 
static void WriteToExcel(){ 
    Application xlsApplication = new Application(); 
    Workbook xlsWorkbook = xlsApplication.Workbooks.Open(excelFilePath); 
    // write data to excel 
    // close up    
} 
+0

你可以在客戶機上調試嗎? Furqan的答案也適用? – JMK

+1

在該機器上安裝.NET 4.5。 –

+0

@HansPassant好的一點,也許OP在開發機器上安裝了4.5,目標是4.0(在客戶端機器上),這是一個被掩蓋的bug,因爲4.5代替了4.0編譯器,因此掩蓋了4.0中的錯誤? – JMK

回答

5

問題降低.NET版本到4.0以後解決。早些時候,我的開發箱有4.5,應用程序是用這個版本編譯的。我的客戶端機器有4.0版本,降低.net版本解決了這個問題。

+1

這似乎很明顯除了我之外的每個人,但只需降低VS中的應用程序屬性頁上的「目標框架」設置。 我最初認爲它需要卸載4.5並在我的開發環境中安裝4.0。 – aland

+0

感謝您發表該答案。我有相同的目標框架問題,直到我閱讀您的文章才意識到它。 – EMR

0

嘗試使用下面的代碼:

[STAThread] 
static void WriteToExcel() 
{ 
    Application xlsApplication = new Application(); 
    var missing = System.Type.Missing; 
    Workbook xlsWorkbook = xlsApplication.Workbooks.Open(excelFilePath, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing); 
    // write data to excel 
    // close up    
} 
+0

我試過了,但沒有效果。 – Mahender

+0

不錯,你解決了它:) –