0

VisualStudio2010を使用してMicrosoftExcel2007および2010用のアドインを開発しました。

これは、Windows7およびOffice2010を搭載した1台のコンピューターを除き、インストールされているすべてのコンピューター(WindowsXPおよびWindows7)で正常に動作します。

アドインがMicrosoftWord2010を自動化して新しいドキュメントを作成し、Excelブックからそのドキュメントに情報をコピーして貼り付けようとすると、次のメッセージが表示されます。

*タイプ'Microsoft.Office.Interop.Word.DocumentClass'のCOMオブジェクトをインターフェイスタイプ'Microsoft.Office.Interop.Word._Document'にキャストできません。次のエラーが原因で、IID'{0002096B-00000-0000-C000-0000000000046}'のインターフェイスに対するCOMコンポーネントのQueryInterface呼び出しが失敗したため、この操作は失敗しました。アプリケーションが別のスレッド用にマーシャリングされたインターフェイスを呼び出しました。(HRESULTからの例外:0x8001010E(RPC_E_WRONG_THREAD))。*

私のプログラムは、Excelブックのワークシートをループして、Word文書にコピーしています。このエラーは、いくつかのループの後で発生します。Excelの範囲がメソッドRange.CopyPictureを使用してクリップボードにコピーされた場合、WordアプリケーションにアクセスしようとするとRPC_E_WRONG_THREADエラーがスローされます。複数のスレッドを使用していません。

誰かが同じ問題を抱えているようですが、まだ答えは提供されていません:http ://social.msdn.microsoft.com/Forums/en/vsto/thread/86abd253-9fb5-46cf-8565-dc2eaa02593b

ユーザーには管理者権限があり、MS Office 2010のインストールを修復し、再度アンインストール/インストールしようとしましたが、問題は解決しませんでした。コンピューターにOffice2007をインストールした後、アドインはExcel 2007で正常に機能しますが、Excel2010では機能しません。

このエラーを見たことがありますか?それを修正する方法を知っていますか?

ありがとう

4

2 に答える 2

0

実際にはWord.Documentオブジェクトはありません。Word.Documentは単なるインターフェイスです。Word._Documentは、Word.Documentインターフェイスの実装です(したがって、デバッグおよび例外で表示されるタイプ)。

Word.Documentが単なるインターフェースであることを知っている:

RPC_E_WRONG_THREADエラーは、スレッドのアパートメントに属していないプロキシオブジェクト用のインターフェイスポインタを介してスレッドが呼び出すときに発生します。

http://support.microsoft.com/kb/172314

コードサンプルがなければ、それ以上のことは言えませんが、これが問題の特定に役立つことを願っています。

編集:

実際、投稿したリンクを見ると、Excelに関連するCOMオブジェクトからWord文書にコピー/貼り付けするすべてのデータを取得してから、Wordに配置することをお勧めします。これは正しいフォーマット/テーブルを実現するための余分な作業を意味することを私は知っていますが、Office COMで壊れたものがたくさんあり(データバインディングなど)、長期的にはより安定して/面倒が少なくなる可能性があります。

于 2012-12-07T14:15:20.897 に答える
0

私の知る限り、Word アプリケーションと Excel アプリケーションを同じプロセス内で実行することはできません。したがって、Excel ワークシートと Word 文書の両方を操作する場合は、2 つのプロセスのオブジェクトを操作する必要があるため、2 つの異なるスレッド (各プロセスには独自のスレッド セットがあります) を操作する必要があります。

ただし、スレッドを作成しない場合、COM は間違ったアパートメント内でオブジェクトを使用することを防ぎます。たとえば、コードで新しい Word ドキュメントを作成する場合、このオブジェクト (別のプロセスにある) へのアクセスは、自動的に作成されたプロキシ オブジェクトを介して行われます。Word ドキュメント プロキシを介して他のオブジェクトにアクセスすると、他のプロキシ オブジェクトが作成されます。これはすべて、あなたが気付かないうちに起こります。突然、あなたが何か間違ったことをした可能性はないと思います。

この動作を示す最小限の例を見つけて、ここに投稿しようと思います。追加情報がなければ、どこで間違ったのかを判断するのは非常に困難です。ただし、問題の解決策が得られない可能性があることを警告する必要があります。私は Excel と自動化でかなり深刻なことをいくつか行いましたが、非常にハック的な回避策が必要な非常に深刻なバグを Excel で発見しました。これらのバグが 2005 年以降修正されていないという事実から、Microsoft は Office Automation にあまり関心を持っていないと私は思います。あたかももう 1 つのバグを発見したかのようです。

よろしく、 スチュアート



PS: これを回答として送信するつもりはありませんでしたが、コメントできるようにするには、より多くの評判ポイントを獲得する必要があるようです。なぜか。

于 2012-12-09T00:40:42.840 に答える