c# - 如何在 .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 位模式下运行,以便数据库驱动程序可以正常工作,但我仍然遇到这个问题。
我应该实施哪些改变来摆脱这个麻烦?
解决方案
推荐阅读
- wxwidgets - wxDataViewListCtrl 和 wxVariant
- java - 使用折射器后的异常 - Eclipse 中的 Java
- unit-testing - (广泛的问题)你如何确定一段代码可以正常工作?
- python - 当我按下按钮时,我试图从 QT Designer 获得一个按钮来打印一些东西
- python - 创建关键字数组
- r - 如何替换/删除统计模型结果中的字符串?
- javascript - 为什么我能够更新 HttpOnly cookie?
- c++ - C ++有一个函数在某个时间激活而不会中断
- c# - 如何在 Kentico API 中赋予角色创建和删除节点的权限?
- ruby - 为什么数组在全名枚举期间返回一个随机布尔值,而不是在 ruby 控制台中?irb