2013-11-14 98 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 –

相关问题