2012-12-06 215 views
0

我已經開發了用於Microsoft Excel 2007和2010的加載項與Visual Studio 2010RPC_E_WRONG_THREAD錯誤和粘貼從Excel到Word

它正常工作的所有計算機(在Windows XP和Windows 7 )除了一臺安裝了Windows 7和Office 2010的計算機外,它已安裝。

當加載項嘗試自動化Microsoft Word 2010以創建新文檔並複製/粘貼信息時,將顯示以下消息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的安裝,卸載/重新安裝它,但它沒沒有解決這個問題。 他的電腦上安裝Office 2007之後,附加在正常工作與Excel 2007中,但仍無法與Excel 2010中

你見過這個錯誤,你會知道如何解決它?

感謝

回答

0

你實際上並沒有一個Word.Document對象,Word.Document只是一個接口。 Word._Document是Word.Document接口的實現(因此您將在調試中看到的類型以及例外情況)。

明知Word.Document只是一個接口:

A RPC_E_WRONG_THREAD error occurs when a thread calls via an interface pointer which is for a proxy object that does not belong to the thread's apartment.

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

我真的不能告訴你比任何都沒有發現一個代碼示例,但我希望這可以幫助你找到問題。

編輯:

其實,看着你發佈的鏈接,我建議你前湊所有要複製/數據粘貼到Word文檔中出與擅長任何COM對象的你把它放入Word中。我知道這將意味着額外的工作才能實現正確的格式化/表格,但Office COM存在很多問題(例如數據綁定),並且從長遠角度來看,它可能會更穩定/更輕鬆。

0

據我所知,Word應用程序和Excel應用程序不能在同一個進程內運行。因此,如果您使用Excel工作表和Word文檔,則必須使用來自兩個進程的對象,因此需要使用兩個不同的線程(每個進程都有自己的一組線程)。

但是,如果您不創建線程,COM將防止您在錯誤的公寓內使用對象。例如,如果您的代碼創建了一個新的Word文檔,則您可以通過自動創建的代理對象訪問此對象(位於不同的進程中)。如果您通過Word文檔代理訪問其他對象,它將創建其他代理對象。所有這一切發生,你甚至沒有注意到它。出於藍色,我會說你不可能做錯了什麼。

我試圖找到一個最小的例子,顯示這種行爲,並在這裏發佈。沒有一些額外的信息就很難說出錯的地方。但我必須警告你,你可能無法解決你的問題。我用Excel和自動化做了一些非常嚴肅的事情,並且我在Excel中發現了一些非常嚴重的錯誤,它們需要非常駭人的解決方法。事實上,這些錯誤自2005年以來一直未得到解決,這讓我相信微軟對Office自動化沒有多大興趣。看起來好像你發現了更多的錯誤。

問候, 斯圖爾特



PS:我不想發送此作爲一個答案,但顯然我必須爲了能夠提出意見,以賺取更多的聲譽點。 Whyever。