首页 > 解决方案 > 如何在 .NET Framework 4.8 中使用 accessdatabaseengine_X64 运行 Microsoft Office 版本:18.2008.12711.0?

问题描述

我是这个平台的新手,也是使用 .Net 运行 MS Office 应用程序的新手。我正在尝试通过单击按钮将数据从 datagridview 导出到 Excel 工作表。这是我的代码:

Dim xlApp As Microsoft.Office.Interop.Excel.Application
Dim xlWorkBook As Microsoft.Office.Interop.Excel.Workbook
Dim xlWorkSheet As Microsoft.Office.Interop.Excel.Worksheet
Dim misValue As Object = System.Reflection.Missing.Value
Dim i As Integer
Dim j As Integer

 xlApp = New Microsoft.Office.Interop.Excel.ApplicationClass
 xlWorkBook = xlApp.Workbooks.Add(misValue)
 xlWorkSheet = xlWorkBook.Sheets("sheet1")
 For i = 0 To DataGrdView.RowCount - 2
     For j = 0 To DataGrdView.ColumnCount - 1
         For k As Integer = 1 To DataGrdView.Columns.Count
             xlWorkSheet.Cells(1, k) = DataGrdView.Columns(k - 1).HeaderText
             xlWorkSheet.Cells(i + 2, j + 1) = DataGrdView(j, i).Value.ToString()
         Next
     Next
 Next
 xlWorkSheet.SaveAs("E:\Student information.xlsx")

执行该行后,xlApp = New Microsoft.Office.Interop.Excel.ApplicationClass

Visual Studio 将异常报告为:

“学生信息 System.exe 中发生了一个未处理的‘System.InvalidCastException’类型异常

附加信息:无法将“Microsoft.Office.Interop.Excel.ApplicationClass”类型的 COM 对象转换为接口类型“Microsoft.Office.Interop.Excel._Application”。此操作失败,因为 IID 为“{000208D5-0000-0000-C000-000000000046}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:找不到元素。(来自 HRESULT 的异常:0x8002802B (TYPE_E_ELEMENTNOTFOUND))。

出现此错误是因为我使用的是 2016 年发布的 AccessDatabaseEngine_X64,MS Office 365 版本:18.2008.12711.0。使用 .Net Framework 4.8。

我知道我可以手动修复办公室并且问题将得到解决,但我不希望我的应用程序的用户手动修复办公室并处理此错误,而是我想提供一个自动处理此问题并给出适当结果的功能。

我尝试在注册表编辑器中删除键 Computer\HKEY_CLASSES_ROOT\TypeLib{00020813-0000-0000-C000-000000000046}\1.9 但这不起作用。

我还确保我的所有 Office 应用程序都在 64 位模式下运行,以便数据库驱动程序可以正常工作,但我仍然遇到这个问题。

我应该实施哪些改变来摆脱这个麻烦?

标签: c#.netexceloffice365database-engine

解决方案


推荐阅读