C# 使用c将文本粘贴到活动的Word窗口#

C# 使用c将文本粘贴到活动的Word窗口#,c#,ms-word,copy-paste,C#,Ms Word,Copy Paste,我正在开发一个应用程序,该应用程序将通过COM端口接收数据,并需要将其粘贴到Microsoft Office程序中(目前,我正在使用Word,但它将支持Excel、PowerPoint等) 我认为一个好主意是将这些数据复制到剪贴板,然后将其粘贴到任何打开的应用程序窗口中(例如,LibreOffice应用程序和记事本都可以完美地工作)。为此,我编写了以下代码: if (booleanIncomingData) { booleanCopy = true; } else if (boolean

我正在开发一个应用程序,该应用程序将通过COM端口接收数据,并需要将其粘贴到Microsoft Office程序中(目前,我正在使用Word,但它将支持Excel、PowerPoint等)

我认为一个好主意是将这些数据复制到剪贴板,然后将其粘贴到任何打开的应用程序窗口中(例如,LibreOffice应用程序和记事本都可以完美地工作)。为此,我编写了以下代码:

if (booleanIncomingData)
{
    booleanCopy = true;
}
else if (booleanOutcomingData)
{
    copy = false;
}
if (copy)
{
    Clipboard.SetText(myString);
}
else
{
    SendKeys.Send("^V");
    SendKeys.Send("{ENTER}");
}
正如我所说,LibreOffice程序和记事本工作得很好,但Word和Excel并没有达到我所认为的效果(基本上显示任何数据,然后跳到下一行)

还有,一个简单的

Clipboard.GetText()ç
不起作用(我的感觉是因为它试图将内容粘贴到活动窗口中)

寻找互操作。Word解决方案在web上,到目前为止还没有成功。有人知道我可以做什么或者我应该在哪里寻找吗?我应该实现Office附加组件而不是常规的Win32应用程序吗

如果需要任何其他信息,请随时索取


César.

它比我想象的要复杂得多。但我目前的应用程序现在可以使用几种软件(Word、Excel、记事本、LibreOffice等)

复制/粘贴数据

  • stackoverflow.com/questions/3546016/how-to-copy-data-to-clipboard-in-c-sharp
  • msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.send(v=vs.110).aspx
获取活动窗口

  • www.csharphelp.com/2006/08/get-current-window-handle-and-caption-with-windows-api-in-c/
  • stackoverflow.com/questions/893669/determinate-where-program-is-the-active-window-in-net
  • stackoverflow.com/questions/2635404/how-to-get-process-name-and-title-of-the-top-window-on-windows-c-sharp
MICROSOFT OFFICE

  • hubbages.com/hub/How-To-Program-with-Excel-and-C-using-a-Ribbon
  • msdn.microsoft.com/en-us/library/vstudio/6b9478cs.aspx
  • stackoverflow.com/questions/13403504/send-text-to-excel-sheet-using-winapi
  • stackoverflow.com/questions/2378206/how-to-get-current-or-focused-cell-value-in-excel-sheet-using-c-sharp

总而言之,Microsoft Office应用程序更麻烦,正如@Brian所建议的,是PIA(主互操作程序集)在这项任务中是至关重要的。

看看。你是如何让word工作的?这在大多数应用程序中都起作用,但在Office应用程序中却不起作用。你是否检测到word并以不同的方式进行操作,并实现自动化?@ScottHanselman基本上遵循了我提供的链接……你到底在哪里遇到了问题?在更高级别的抽象中,这是一个de问题检测活动窗口,确保它是WinWord,然后将所需数据移动到剪贴板,最后发送一个“CTRL+V”命令。啊,我正在这样做WM_粘贴:IntPtr hWnd=GetFocusedHandle();PostMessage(hWnd,WM_粘贴,IntPtr.Zero,IntPtr.Zero);我将尝试使用SendKeys。奇怪……我确保Word在前面,光标在那里,但是Word(在Windows 8.1和Word 2013上)忽略Ctrl-V。您使用PIA的目的是什么?您是通过PIA自动使用Word的COM API还是它接受Ctrl-V?好的,这是我以前的代码片段:经过一段时间后,我决定,将SendKeys.Send()发送到任何活动窗口对于我所追求的目标都会更加有效。