C# 通过Excel互操作进行一系列复制/粘贴后,OpenClipboard失败(HRESULT:0x800401D0)
我需要添加一个Excel VS,用于将形状从一个源工作表复制/粘贴到目标工作表(两者都在同一工作簿中)。 目标工作表包含数据条目(每个条目一行)。例程对每一行执行以下操作:C# 通过Excel互操作进行一系列复制/粘贴后,OpenClipboard失败(HRESULT:0x800401D0),c#,.net,excel,vb.net,vsto,C#,.net,Excel,Vb.net,Vsto,我需要添加一个Excel VS,用于将形状从一个源工作表复制/粘贴到目标工作表(两者都在同一工作簿中)。 目标工作表包含数据条目(每个条目一行)。例程对每一行执行以下操作: 获取数据 根据数据计算X-Y位置 从源工作表复制形状(形状名称取决于数据) 在目标工作表中粘贴形状 移动到计算的X-Y位置 该例程在我的两台测试计算机上运行良好,最多300行(没有尝试更多)。 客户机的所有计算机都有问题,例如“大”数据表。代码在100到130之间的某一行中断,但每次在同一文件上运行同一例程时,代码都会中断到
我读到这个HResult可能指的是竞争条件,但在我的例子中,我们正在尝试剪切,因此形状还没有在剪贴板中。工作簿中是否有任何事件。因为它是随机的,我怀疑您正在使用所选形状进行复制,并且由于某些原因,该形状未处于活动状态。看起来您正在将形状复制到剪贴板,而剪贴板是空的。事件可能会删除对对象的选择。源形状是通过其名称访问的,我从不使用“已选择”。步骤3:TempShape=SourceSheet.Shapes(Name).replicate;TempShape.CutIs源文件无效。您是否尝试过TempShape=Sheet(“Name”)。Shapes(Name)。重复;也许可以尝试使用VBA脚本来查看是否发生相同的随机错误。我曾经非常擅长InteropExcel,但厌倦了处理所有错误,决定回到VBA。除此之外,interop的速度非常慢。是的,SourceSheet是有效的:形状是重复的(我可以在SourceSheet中看到它),TempShape也是有效的(我总是在
中测试String s=TempShape.name
以确保引用没有丢失)。我现在正在研究这个问题:调试VSTO确实很痛苦。。它还包装了如此多的.Net功能,这使得在VSTO环境下有10%的框架文档无效。。