Word互操作应用程序,将文本写入打开文档的末尾

本文关键字:文档 应用程序 互操作 文本 Word | 更新日期: 2023-09-27 17:53:07

我正在尝试编写一个c#应用程序,该应用程序将在MS Word中找到一个打开的文档,并使用Word互操作将一些文本写到文档的末尾。这可能吗?

我知道使用。net框架内建的Process和Sendkeys可以解决这个问题,但是我想使用Word互操作来解决这个问题,这样我就可以在将来添加更多的功能(Sendkeys也只能在某些特殊情况下解决这个问题)

谢谢!

更新:

我得到了以下部分解决方案工作:

    Application wordApp = new Application();
    wordApp.Visible = true;
    wordApp.Documents.Add();
    Range rng = wordApp.ActiveDocument.Range(0, 0);
    rng.Text = "New Text";

但是我想使用一个已经打开的word实例,而不是创建一个新的。谢谢!

更新2:

我关闭!以下代码在UAC关闭

时工作
    Application wordApp = (Word.Application)Marshal.GetActiveObject("Word.Application");
    Range rng = wordApp.ActiveDocument.Range(0, 0);
    rng.Text = "New Text";

但我不知道如何让它与UAC启用工作。UAC不会导致任何错误或异常,它只是不会将文本写入打开的文档。

感谢大家的帮助,到目前为止,结束是在眼前:)!

更新3:

只是在UAC打开的情况下再试一次,它工作了…奇怪。如果你知道任何关于互操作和UAC的好资源,请在这里发布链接!

Word互操作应用程序,将文本写入打开文档的末尾

您是否考虑过使用Marshal.GetActiveObject("Word.Application")来获取正在运行的应用程序,而不是创建一个新应用程序?

绝对是Evan。microsoftofficeinterop Assemblies让你可以用c#做任何事情!SendKeys()有问题

http://msdn.microsoft.com/en-us/library/15s06t57 (v = vs.80) . aspx

我想我应该详细说明SendKeys():它甚至不再可靠地工作,因为它是一个主要的黑客工具。MS Office互操作程序集允许您使用每个Office组件做大量的事情。我在MS Excel和Word中广泛地使用了它们,你可以做用户可以通过编程做的任何事情。

你可以在下面尝试。这里我给出了图像插入的例子。

 WordC.Application wordApp = new WordC.Application();
                //  create Word document object
                WordC.Document aDoc = null;
                object readOnly = false;
                 object isVisible = false;
                 wordApp.Visible = false;
               //  wordApp.DisplayAlerts = false;
//docFileName is the filename with complete path. ex c://test.doc
                 aDoc = wordApp.Documents.Open(docFileName, Type.Missing, ref readOnly, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, ref isVisible, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
aDoc.Activate();
aDoc.InlineShapes.AddPicture(imgFilename, Type.Missing, Type.Missing, Type.Missing);
                aDoc.Save();
                aDoc.Close(Type.Missing, Type.Missing, Type.Missing);
                wordApp.Quit(Type.Missing, Type.Missing, Type.Missing);