我正在尝试编写一个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的任何好资源,请在这里发布链接!
答案 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);