10

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ビットマシンでテストしました。エラーはありません。これは特定のマシンに何か問題があることを意味していると思います。それは私のソフトウェアのせいではありません。ああプログラミング。

4

1 に答える 1

7

暫定的な回答: 私のソフトウェアは正常でしたが、その特定のマシンのセットアップに何か問題がありました。

編集

おそらく問題の原因と思われるものを見つけました。問題のマシンには Office がありますが、 MSI ベース(EXE から実行) ではなく、クリックして実行(インターネットから実行)として設定されています。これは、特定のレジストリ設定、DLL、コンポーネントなどが で利用できないため、失敗することを意味します。Microsoft.Office.Interop.Excel

編集 2

それは間違いなく問題でした。Office の完全な MSI ベースのインストールにアップグレードしただけで、すべてがうまく機能します。

編集 3

これをバグとして Microsoft Connect に追加しました:

https://connect.microsoft.com/VisualStudio/feedback/details/672276/excel-interop-fails-on-machine-where-office-is-installed-as-click-to-run#details

于 2011-05-19T21:57:24.593 に答える