私はこのプラットフォームの初心者であり、.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.InvalidCastException' の未処理の例外が学生情報 System.exe で発生しました
追加情報: タイプ 'Microsoft.Office.Interop.Excel.ApplicationClass' の COM オブジェクトをインターフェイス タイプ 'Microsoft.Office.Interop.Excel._Application' にキャストできません。IID '{000208D5-0000-0000-C000-000000000046}' を持つインターフェイスの COM コンポーネントでの QueryInterface 呼び出しが次のエラーにより失敗したため、この操作は失敗しました: 要素が見つかりません。(HRESULT からの例外: 0x8002802B (TYPE_E_ELEMENTNOTFOUND))」。
MS Office 365 バージョン: 18.2008.12711.0 で、2016 年にリリースされた AccessDatabaseEngine_X64 を使用しているため、このエラーが発生します。.Net Framework 4.8 で。
オフィスを手動で修復すれば問題は解決することはわかっていますが、アプリケーションのユーザーにオフィスを修復してこのエラーを手動で処理してもらいたくありません。代わりに、この問題を自動的に処理して適切な結果をもたらす機能を提供したいと考えています。
レジストリ エディターでキー Computer\HKEY_CLASSES_ROOT\TypeLib{00020813-0000-0000-C000-000000000046}\1.9 を削除しようとしましたが、これは機能しませんでした。
また、データベース ドライバーが適切に動作するように、すべての Office アプリが 64 ビット モードで実行されていることも確認しましたが、まだこの問題が発生しています。
この問題を解決するには、どの変更を実装する必要がありますか?