Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RPC_E_错误_从Excel剪切并粘贴到Word时出现线程错误_Excel_Com_Ms Word_Vsto - Fatal编程技术网

RPC_E_错误_从Excel剪切并粘贴到Word时出现线程错误

RPC_E_错误_从Excel剪切并粘贴到Word时出现线程错误,excel,com,ms-word,vsto,Excel,Com,Ms Word,Vsto,我已经使用Visual Studio 2010为Microsoft Excel 2007和2010开发了一个外接程序 除了一台装有Windows 7和Office 2010的计算机外,它在所有安装了它的计算机(Windows XP和Windows 7)上都可以正常工作 当加载项尝试自动执行Microsoft Word 2010创建新文档并将Excel工作簿中的信息复制/粘贴到其中时,将显示以下消息: *无法将类型为“Microsoft.Office.Interop.Word.DocumentCl

我已经使用Visual Studio 2010为Microsoft Excel 2007和2010开发了一个外接程序

除了一台装有Windows 7和Office 2010的计算机外,它在所有安装了它的计算机(Windows XP和Windows 7)上都可以正常工作

当加载项尝试自动执行Microsoft Word 2010创建新文档并将Excel工作簿中的信息复制/粘贴到其中时,将显示以下消息:

*无法将类型为“Microsoft.Office.Interop.Word.DocumentClass”的COM对象强制转换为接口类型“Microsoft.Office.Interop.Word.\u Document”。此操作失败,因为对IID为“{0002096B-00000-0000-C000-0000000000046}”的接口的COM组件的QueryInterface调用失败,原因是以下错误:应用程序调用了为其他线程封送的接口。(来自HRESULT的异常:0x8001010E(RPC_E_错误_线程))*

我的程序在Excel工作簿的工作表上循环,并将它们复制到Word文档中。该错误发生在多次循环之后,当Excel范围使用range.CopyPicture方法复制到剪贴板时,然后在我尝试访问Word应用程序时引发RPC_E_error_线程错误。我不使用多线程

有些人似乎有同样的问题,但尚未提供答案:

该用户拥有管理权限,他试图修复MS Office 2010安装,并再次卸载/安装,但没有解决问题。 在他的计算机上安装Office2007后,该加载项与Excel2007配合良好,但与Excel2010仍不配合

您是否见过此错误,是否知道如何修复它


谢谢

您实际上没有Word.Document对象,Word.Document只是一个界面。Word.\u文档是Word.Document接口的实现(因此您将在调试和异常中看到该类型)

了解Word.Document只是一个界面:

当线程通过接口指针调用不属于线程单元的代理对象时,会发生RPC_E_error_线程错误

如果没有代码示例,我真的无法告诉您更多,但我希望这能帮助您找到问题所在

编辑:


事实上,看看你发布的链接,我建议你在将它放入word之前,从任何与excel相关的COM对象中删除所有要复制/粘贴到word文档中的数据。我知道这将意味着需要额外的工作来实现正确的格式/表格,但Office COM有很多问题(例如数据绑定),从长远来看,它可能更稳定/更少麻烦。

据我所知,Word应用程序和Excel应用程序不能在同一进程内运行。因此,如果同时使用Excel工作表和Word文档,则必须使用来自两个进程的对象,因此需要使用两个不同的线程(每个进程都有自己的线程集)

但是,如果您不创建线程,COM将保护您不在错误的单元中使用对象。例如,如果您的代码创建了一个新的Word文档,那么您对该对象(位于不同进程中)的访问将通过自动创建的代理对象完成。如果通过Word文档代理访问其他对象,它将创建其他代理对象。所有这些都发生在你没有注意到的情况下。突然,我想说你不可能做错了什么

我将尝试找到一个显示这种行为的最小示例,并将其发布在这里。如果没有额外的信息,很难说你在哪里出了问题。但我必须警告你,你可能找不到解决问题的办法。我在Excel和自动化方面做了一些非常认真的工作,我发现Excel中存在一些非常严重的错误,需要非常黑客的解决方法。这些漏洞自2005年以来一直没有被修复,这让我相信微软对办公自动化没有多大兴趣。似乎你又发现了一个bug

问候,, 斯图尔特



PS:我不想将此作为答案发送,但显然我必须获得更多的声誉点数才能发表评论。无论如何