C# 剪贴板粘贴问题

C# 剪贴板粘贴问题,c#,.net,winforms,excel,C#,.net,Winforms,Excel,我的应用程序从剪贴板获取字符串: IDataObject dataInClipboard = Clipboard.GetDataObject(); string stringInClipboard = (string)dataInClipboard.GetData(DataFormats.Text); Clipboard.SetText(result); 然后操作数据并将结果字符串复制到剪贴板: IDataObject dataInClipboard = Clipboard.GetDataO

我的应用程序从剪贴板获取字符串:

IDataObject dataInClipboard = Clipboard.GetDataObject();
string stringInClipboard = (string)dataInClipboard.GetData(DataFormats.Text);
Clipboard.SetText(result);
然后操作数据并将结果字符串复制到剪贴板:

IDataObject dataInClipboard = Clipboard.GetDataObject();
string stringInClipboard = (string)dataInClipboard.GetData(DataFormats.Text);
Clipboard.SetText(result);
它应该有一个Excel工作表中的表作为输入剪贴板,一个由[\t\r\n]分隔的字符串作为输出剪贴板

SetText应该清除剪贴板,我确实有所需的输出剪贴板。但是,当我手动将其粘贴到同一Excel工作表时,会粘贴上一个输入剪贴板内容

同时,如果我先前关闭了应用程序,则会粘贴正确的输出字符串。此外,如果我以前完成了Excel过程,然后再次启动它,那么也会粘贴正确的输出


错误在哪里?

我注意到当应用程序窗口关闭时,问题消失了。此外,我决定更改程序逻辑:如果它只适用于Excel,为什么不将其转换为外接程序?所以,谢谢你们的帮助,现在问题已经解决了。

AFAIK剪贴板没有输入和输出,只有不同的格式。如果您从Excel复制,它将放8?与特殊MSOffice格式不同的格式,包括将制表符分隔的数据格式化为文本,粘贴时将按优先级顺序检查每种格式。获取一个剪贴板查看器,其中显示剪贴板中的所有格式,并在过程的每个阶段检查剪贴板内容。如果你还在挣扎,我想看看剪贴板查看器的内容。谢谢你的评论。我的意思是,当剪贴板作为应用程序输入进行处理时,它包含一个表,并且它包含一个字符串作为应用程序输出。使用剪贴板在应用程序中设置断点来观察剪贴板,在每行运行后,逐步检查内容是否符合预期。可能是Excel在剪贴板上有一个首选格式,因此在清除剪贴板的其余部分之前,SetText无效。当剪贴板句柄打开的应用程序关闭时,剪贴板可以以不同的方式运行。当你的应用程序关闭时,它可能正在清理一些剪贴板;无论如何,应用程序关闭前后的剪贴板保持不变。它有相同的文本、DataObject、LocaleID、Ole私有数据等。如果剪贴板中有相同的信息,我很惊讶从剪贴板粘贴了不同的信息。我唯一建议的是显式调用EmptyClipboard WinAPI或剪贴板。在调用SetText之前清除