Excel VB:加载类型库/DLL时出错。(来自HRESULT的异常:0x80029C4A(类型为E)

Excel VB:加载类型库/DLL时出错。(来自HRESULT的异常:0x80029C4A(类型为E),excel,vb.net,office-interop,Excel,Vb.net,Office Interop,我正在开发一个需要从Excel导入数据的应用程序 我的解决方案是使用Microsoft.office.Interop.Excel。 但我在调试时遇到以下错误: 消息=无法强制转换类型为的COM对象 将“Microsoft.Office.Interop.Excel.ApplicationClass”更改为接口类型 “Microsoft.Office.Interop.Excel.\u应用程序”。此操作失败 因为接口的COM组件上的QueryInterface调用 由于以下原因,IID“{000208

我正在开发一个需要从Excel导入数据的应用程序

我的解决方案是使用Microsoft.office.Interop.Excel。

但我在调试时遇到以下错误:

消息=无法强制转换类型为的COM对象 将“Microsoft.Office.Interop.Excel.ApplicationClass”更改为接口类型 “Microsoft.Office.Interop.Excel.\u应用程序”。此操作失败 因为接口的COM组件上的QueryInterface调用 由于以下原因,IID“{000208D5-0000-0000-C000-0000000000 46}”失败: 以下错误:加载类型库/DLL时出错。(来自 HRESULT:0x80029C4A(类型库)

下面是我的代码:

Imports Excel = Microsoft.office.Interop.Excel

Private Sub BExcel1_Click(sender As Object, e As EventArgs) Handles BExcel1.Click
    OpenFileDialog1.Filter = "Excel Files|*.xlsx; *.xls; *.xlsm"
    If (OpenFileDialog1.ShowDialog() = DialogResult.OK) Then
        ExcelPath1.Text = OpenFileDialog1.FileName
    End If

    Dim XlApp As New Excel.Application
    Dim XlWorkBook As Excel.Workbook
    Dim XlWorkSheet As Excel.Worksheet
    XlWorkBook = XlApp.Workbooks.Open(ExcelPath1.Text)

 End Sub
我在谷歌上搜索了一些解决方案(如下所示),但没有成功:

  • 我把办公室修好了
  • 我已经修好了Visual Studio
  • 我用注册表编辑器检查了
    计算机\HKEY\u类\u根\TypeLib\
    ,但在
    00020813-0000-0000-C000-0000000000 46下,我只得到了一个版本1.9,这似乎不像是两个版本之间的冲突
  • 有什么办法解决这个问题吗

    VS version:2017 community
    
    Excel version:2016
    
    Microsoft.Office.Interop.Excel version:15.0.0.0
    

    首先,尝试使用
    /ResetUserData
    命令行参数运行VisualStudio

    显然,您试图连接到错误的Excel版本。在卸载旧版本的Office后,您似乎还有一些额外的windows注册表项,反之亦然。无论如何,请查看描述完全相同问题的博客文章。基本上,您需要在windows注册表中找到错误条目,然后将其删除

    BTW当您向项目添加新的COM引用时,将自动生成错过的PIA(如果不再存在)。因此,这是一种可能的方式。此外,您还可以尝试将互操作类型嵌入到自己的程序集中,如以下截图所示:


    如果将Office互操作程序集引用的
    嵌入互操作类型
    属性设置为
    True
    (自.NET Framework 4.0起),并将
    特定版本
    属性设置为
    False
    ,则您的代码应可用于任何版本的Excel


    但是,您必须以与Office相同的位编译代码。对于32位版本的Office,您必须将代码编译为
    x86
    ,否则此异常仍可能在64位计算机上发生!

    修复Office不够好,请重新安装它。在执行此操作之前,请运行chkdsk.exe以验证磁盘驱动器是否仍处于d状态ecent shape.Excel 2016应该显示版本16.#,而不是15,即Office 2013。您在哪里看到这些冲突的版本号?@Cindy Microsoft.Office.Interop.Excel的版本来自Visual Studio Property Manager的参考属性。它显示15.0.0.0。计算机下的键00020813-0000-0000-C000-0000000000 46\HKEY_CLASSES_ROOT\TypeLib\,它只得到子项1.9(计算机\HKEY_CLASSES_ROOT\WOW6432Node\TypeLib\{00020813-0000-0000-C000-0000000000 46}\1.9),默认标记为:数据:Microsoft Excel 16.0对象库)。我没有看到任何冲突的版本号,所以我很困惑。你的机器上安装了哪个版本的Excel?@Cindy Office 2016标准。如果有人描述或只是留下评论,为什么他们认为帖子没有回答所发布的问题或解决问题,这对他们来说是好事。我想,这次投票失败是因为这几乎是“链接”内容,到外部来源。现场指南规定信息应在现场,而非现场外部。如果它已经在现场,一个问题应该被标记为一个重复的问题。我反对投票,因为信息是在一个链接中提供的,而这个链接现在已经死了,这就是为什么只有链接的回复令人沮丧。