VB:加载类型 library/DLL 时出错。 (HRESULT 异常:0x80029C4A (TYPE_E_CANTLOADLIBRARY)
VB: Error loading type library/DLL. (Exception from HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY)
我正在开发一个需要从 Excel.
导入数据的应用程序
我的解决方案是使用 Microsoft.office.Interop.Excel.
但是我调试的时候出现这个错误:
Message=Unable to cast COM object of type
'Microsoft.Office.Interop.Excel.ApplicationClass' to interface type
'Microsoft.Office.Interop.Excel._Application'. This operation failed
because the QueryInterface call on the COM component for the interface
with IID '{000208D5-0000-0000-C000-000000000046}' failed due to the
following error: Error loading type library/DLL. (Exception from
HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY))
下面是我的代码:
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
我用谷歌搜索找到了一些解决方案(如下),但没有成功:
- 我修好了Office
- 我已修复Visual Studio
- 我用注册表编辑器查看过
Computer\HKEY_CLASSES_ROOT\TypeLib\
,但是在00020813-0000-0000-C000-000000000046
下,我得到的只有一个1.9版本,好像不是两个版本冲突吧?
有解决此问题的想法吗?
VS version:2017 community
Excel version:2016
Microsoft.Office.Interop.Excel version:15.0.0.0
首先,尝试 运行 Visual Studio 使用 /ResetUserData
命令行参数。在 Error "Unable to cast COM object..." when exporting to Microsoft Excel from Team Explorer 2008 文章中阅读更多相关信息。
显然您正在尝试连接到错误的 Excel 版本。看起来您在卸载旧版本的 Office 后还剩下一些额外的 windows 注册表项,反之亦然。无论如何,请查看描述完全相同问题的 How to solve “Unable to cast COM object of type Microsoft.Office.Interop.Excel.ApplicationClass’ to interface type ‘Microsoft.Office.Interop.Excel._Application’” 博客 post。基本上你需要在 windows 注册表中找到错误的条目,然后将其删除。
顺便说一句,当您向项目添加新的 COM 引用时,会自动生成丢失的 PIA(如果它不再存在)。所以,这是一个可行的方法。您也可以尝试将互操作类型嵌入到您自己的程序集中,如下面的屏幕截图所示:
如果将 Embed Interop Types
属性 设置为 True
(自 .NET Framework 4.0 起)并将 Specific Version
属性 设置为 False
对于 Office Interop 程序集参考,那么您的代码应该适用于 Excel.
的任何版本
但是,您必须使用与 Office 相同的位数来编译代码。对于 32 位版本的 Office,您必须将代码编译为 x86
,否则在 64 位机器上仍然会出现此异常!
我正在开发一个需要从 Excel.
导入数据的应用程序我的解决方案是使用 Microsoft.office.Interop.Excel.
但是我调试的时候出现这个错误:
Message=Unable to cast COM object of type 'Microsoft.Office.Interop.Excel.ApplicationClass' to interface type 'Microsoft.Office.Interop.Excel._Application'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{000208D5-0000-0000-C000-000000000046}' failed due to the following error: Error loading type library/DLL. (Exception from HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY))
下面是我的代码:
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
我用谷歌搜索找到了一些解决方案(如下),但没有成功:
- 我修好了Office
- 我已修复Visual Studio
- 我用注册表编辑器查看过
Computer\HKEY_CLASSES_ROOT\TypeLib\
,但是在00020813-0000-0000-C000-000000000046
下,我得到的只有一个1.9版本,好像不是两个版本冲突吧?
有解决此问题的想法吗?
VS version:2017 community
Excel version:2016
Microsoft.Office.Interop.Excel version:15.0.0.0
首先,尝试 运行 Visual Studio 使用 /ResetUserData
命令行参数。在 Error "Unable to cast COM object..." when exporting to Microsoft Excel from Team Explorer 2008 文章中阅读更多相关信息。
显然您正在尝试连接到错误的 Excel 版本。看起来您在卸载旧版本的 Office 后还剩下一些额外的 windows 注册表项,反之亦然。无论如何,请查看描述完全相同问题的 How to solve “Unable to cast COM object of type Microsoft.Office.Interop.Excel.ApplicationClass’ to interface type ‘Microsoft.Office.Interop.Excel._Application’” 博客 post。基本上你需要在 windows 注册表中找到错误的条目,然后将其删除。
顺便说一句,当您向项目添加新的 COM 引用时,会自动生成丢失的 PIA(如果它不再存在)。所以,这是一个可行的方法。您也可以尝试将互操作类型嵌入到您自己的程序集中,如下面的屏幕截图所示:
如果将 Embed Interop Types
属性 设置为 True
(自 .NET Framework 4.0 起)并将 Specific Version
属性 设置为 False
对于 Office Interop 程序集参考,那么您的代码应该适用于 Excel.
但是,您必须使用与 Office 相同的位数来编译代码。对于 32 位版本的 Office,您必须将代码编译为 x86
,否则在 64 位机器上仍然会出现此异常!