Word Interop应用程序将文本写入打开文档的末尾

时间:2011-04-23 19:49:52

标签: c# interop ms-word

我正在尝试编写一个C#应用程序,它将在MS Word中找到一个文档,并使用word interop将一些文本写入文档的末尾。这可能吗?

我知道可以使用.NET Framework中内置的Process和Sendkeys来解决这个问题,但是我想使用Word Interop来解决这个问题,这样我就可以在路上添加更多功能(同时sendkeys会真的只解决某些特殊情况下的问题。)

谢谢!

更新

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

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

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

更新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的任何好资源,请在这里发布链接!

3 个答案:

答案 0 :(得分:1)

绝对是埃文。 Microsoft Office Interop Assemblies让您可以使用C#执行任何操作! SendKeys()是一个问题。

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

你可以尝试下面。我在这里举例说明插入图像。

 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);