Excel相互運用機能を使用してExcelファイルからデータを読み取るC#WPF(.NET 4.0)アプリケーションがあります。
このアプリをExcel2007を搭載した開発マシンで実行すると、正常に動作します。Excel 2010がインストールされている別のマシンで実行すると、次のエラーメッセージが表示されて失敗します。
System.Runtime.InteropServices.COMException(0x80040154):CLSID {00024500-0000-0000-C000-000000000046}のコンポーネントのCOMクラスファクトリの取得に失敗しました。次のエラーが原因です:80040154クラスが登録されていません(HRESULT:0x80040154(REGDB_E_CLASSNOTREG ))。
Microsoft.Office.Interop.Excel.Application
次のように、オブジェクトを作成しようとすると失敗します。
var app = new Application();
私のプロジェクトにはMicrosoft.Office.Interop.Excel.dll
(バージョン14.0.0.0、ランタイムバージョンv2.0.50727)への参照があります。これは次の場所にあります。
C:\ Program Files \ Microsoft Visual Studio 10.0 \ Visual Studio Tools for Office \ PIA \ Office14 \ Microsoft.Office.Interop.Excel.dll
参照されているdllのデフォルト設定でアプリを実行しようとしました:
- ローカルコピー=False
- 埋め込み相互運用タイプ=True
- 特定のバージョン=True
また、参照されているdllで次の設定を使用してアプリを実行しようとしました。
- ローカルコピー=True
- 相互運用タイプの埋め込み=False
- 特定のバージョン=True
しかし、Office 2010を搭載したマシンでは、これらの試みはどちらも機能しませんでした。
その他の注意事項:Office 2010を搭載したマシンは64ビット(Windows 7付き)です。私の開発マシンはX86とWindowsXPです。
質問
「クラスが登録されていません」という例外の原因とその修正方法を教えてください。
編集
Alexの回答に応えて、アプリをAny CPU、X86、X64としてビルドしようとしましたが、違いはありませんでした。同じ「クラスが登録されていません」というエラーが引き続き発生します。
編集2
Office2010を搭載した32ビットマシンでアプリを試してみました。エラーはありません。したがって、特定のマシンに問題があるか、64ビットとOffice2010の組み合わせである可能性があります。
編集3
さて、Office2010を搭載した別の64ビットマシンでテストしました。エラーはありません。これは特定のマシンに何か問題があることを意味していると思います。それは私のソフトウェアのせいではありません。ああプログラミング。