2013-11-14 100 views
0

我在用戶端嘗試exe時遇到此問題。用戶有MicosoftExcel 2000,我有execel 2003.有人可以幫助我。C#,來自HRESULT的異常:0x80029C4A(TYPE_E_CANTLOADLIBRARY)

我已經創建了C#這個工具,並使用COM

if(strDataSheetFile.Trim().EndsWith(".xls") || strDataSheetFile.Trim().EndsWith(".xlsx")) 
     { 
      System.IO.StreamWriter file = null; 
      if (IfAbFile) 
      { 
       file = new System.IO.StreamWriter(AbaqusDeckFile.ToString(), true); 
      } 
      else 
      { 
       string[] strFILEnamesSplit = strDataSheetFile.Split(new Char[] { '\\' }); 
       string ExpFile = ""; 
       int ilnt = 0; 
       foreach (string strVal in strFILEnamesSplit) 
       { 
        if (ilnt < (strFILEnamesSplit.Length - 1)) 
        { 
         ExpFile += strVal; 
         ExpFile += "/"; 
        } 
        else 
         ExpFile += "Deck.inp"; 

        ilnt += 1; 
       } 

       file = new System.IO.StreamWriter(ExpFile.ToString(), true); 
      } 

      List<List<double>> List_SheetValues = new List<List<double>>(); 

      Excel.Application objexcel; 
      Excel.Workbook wbexcel; 

      Excel.Worksheet wsheet; 

      objexcel = new Excel.Application(); 

      //strDataSheetFile = @"C:\Ajoy\Demos\IsoMount\IsoMount_Springs_database_updated.xls"; 

      if (File.Exists(strDataSheetFile)) 
       wbexcel = objexcel.Workbooks.Open(strDataSheetFile); 
      else 
      { 
       MessageBox.Show(" Please state the number of springs", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       Application.UseWaitCursor = false; 
       return; 
      } 
+0

看起來,在你的VBA代碼,您將使用所有的Excel版本的應用移植在您的機器上註冊的類型庫,但不在最終用戶機器上。在最終用戶機器的末尾檢查參考對話框中是否有**(缺失)**的任何內容。 – JMK

+0

嗨JMK,我用C#編寫了這個代碼。你有一個suggesion請 – user2982029

+0

沒有實際上是把你的代碼的問題,並明確了線造成你,我們沒有太多的去麻煩。 – JMK

回答

0

我認爲這個問題是你編譯你的項目爲「64」的64位的而不是編譯爲x86 32位應用程序。請按照以下步驟操作:

->Right click on Project 
->Select Properties 
->Select Build tab 
->Change "Platform Target" to "x86" 
->now run the Project. 
+0

嗨Sudhakar,感謝您的答覆。我試過了,但後來我得到了同樣的錯誤。 32位沒有區別。能否請你再給我一次suggesion如有任何 – user2982029

+0

請您參考,而不是2003的Excel 2000庫構建應用程序?因爲你的客戶有excel 2000. –

+0

當然,這是有道理的Sudhakar。實際上,我正在尋找一種解決方案,這可能是通用的,因爲可能有另一個用戶擁有其他版本,我無法繼續重新整理應用,對。 – user2982029

1

這可能發生在您使用早期(編譯時)綁定到Excel類型庫中。

用戶具有不同版本的類型庫(在您的計算機上爲2000 vs 2003)。 您是否嘗試過你的機器&上安裝Excel 2000中通過鏈接到2000類型庫編譯你的應用程序。或者,如果您沒有使用任何2003特定功能,並且您使用的功能&對象在這兩個版本之間沒有更改,則可以嘗試遲到(運行時)綁定。

就會有輕微的性能命中&你失去的IntelliSense在IDE中,但應該讓整個支持這些對象&功能

+0

嗨Robertdeniro,感謝您的答覆。你能告訴我如何做後期運行時綁定。而且,我在看解決這個問題,因爲有可能是這個應用程序的多個用戶,並且這個程序應該是完全獨立的Excel版本的用戶可能使用....的通用方法 – user2982029

+0

看看這個文章http://amri-mlee.com/articles/c-late-binding-excel-interop-tutorial-part-1/這可能是在VB輕鬆了許多(如果它仍然有CreateObject方法),但基本上涉及調用Activator.CreateInstance(Type.GetTypeFromProgID(「Excel.Application」)。我從來沒有在C#中使用過這個,但我很熟悉VB日子裏的這個錯誤,該站點上的示例聲明返回類型爲對象,然後使用InvokeMember在那個變量上。如果你聲明它是動態的,那麼你可能會留下大部分代碼。 –

+0

通讀以下https://www.google.co.za/search?q=c%23+late+binding+dynamic –

相關問題