【问题标题】:C# ,Exception from HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY)C#,来自 HRESULT 的异常:0x80029C4A (TYPE_E_CANTLOADLIBRARY)
【发布时间】:2013-11-14 19:23:16
【问题描述】:

当我在用户端尝试 exe 时,我遇到了这个问题。用户有 MicosoftExcel 2000,我有 execel 2003。有人可以帮我吗。

我用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;
            }

【问题讨论】:

  • 看起来,在您的 VBA 代码中,您使用的是在您的机器上注册的类型库,而不是在最终用户机器上。在最终用户计算机上检查参考对话框中是否有任何带有 (missing) 的内容。
  • 嗨,JMK,我已经用 C# 编写了这个代码。请问您有什么建议
  • 如果没有真正将您的代码放入问题中并确定哪些行给您带来麻烦,我们没有太多工作要做。
  • JMK,我已经发布了我试图打开 excel 文件的部分代码.....

标签: c# excel exception


【解决方案1】:

这可能发生在您使用早期(编译时)绑定到 Excel 类型库时。

用户拥有不同版本的类型库(您机器上的 2000 与 2003)。 您是否尝试过在您的机器上安装 Excel 2000 并通过链接到 2000 类型库来编译您的应用程序。

或者,如果您没有使用任何 2003 特定功能,并且您使用的函数和对象在这两个版本之间没有变化,您可以尝试后期(运行时)绑定。

性能会受到轻微影响,您会在 IDE 中失去智能感知,但应该让您的应用可移植到支持这些对象和函数的所有 Excel 版本

【讨论】:

  • 您好罗伯特德尼罗,感谢您的回复。你能告诉我如何进行后期运行时绑定。此外,我正在寻找解决这个问题的通用方法,因为这个应用程序可能有多个用户,并且这个应用程序应该完全独立于用户可能使用的 excel 版本......
  • 看看这篇文章amri-mlee.com/articles/…这在VB中可能会容易很多(如果它仍然有CreateObject方法)但基本上涉及调用Activator.CreateInstance(Type.GetTypeFromProgID(“Excel.Application ")。我自己从来没有在 C# 中使用过这个,但是从我的 VB 时代开始就对这个错误很熟悉了。该站点上的示例将返回类型声明为对象,然后在该变量上使用 InvokeMember。如果将其声明为会容易得多动态&然后您可能可以保留大部分代码。
  • @robertdeniro :谢谢先生,我想我们应该点击amri-mlee.com/articles/… 链接来解决这个问题。
【解决方案2】:

我认为问题在于您将项目编译为 'x64' 64 位,而不是将其编译为 x86 32 位应用程序。请按照以下步骤操作:

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

【讨论】:

  • 您好 Sudhakar,感谢您的回复。我试过了,但后来我得到了同样的错误。 32位没有区别。如果有的话,你能给我另一个建议吗
  • 您能否通过引用 Excel 2000 库而不是 2003 来构建您的应用程序?因为您的客户拥有 excel 2000。
  • 当然,这是有道理的 Sudhakar。我实际上正在寻找一个可以通用的解决方案,因为可能有另一个用户有其他版本,我不能继续重建应用程序,对。
  • 你说的很对,我们不应该让我们的App依赖特定版本的Excel。
  • 因此,c# 中的这段代码有助于 COM 访问 excel 文件并从单元格中获取值。我希望有一种方法可以使该设施在构建后不依赖于 excel 版本。 Sudhakar,仍在等待解决方案。可能这可能是一个新的发展需求的范围。不知道
猜你喜欢
  • 2011-04-08
  • 2018-10-17
  • 2012-07-13
  • 2018-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多