2011-04-23 73 views
1

我正在尝试编写一个C#应用程序,它将查找在MS Word中打开的文档,并使用word interop将文本写入文档末尾。这可能吗?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试图再次打开和它的工作...奇怪。如果你知道任何有关interop和UAC的优秀资源,请在这里发布链接!

回答

1

你看过使用​​来获得正在运行的应用程序,而不是创建一个新的?

+0

谢谢!刚刚做了,似乎得到了单词的公开实例,但它没有发送文本(文本通过我的问题的更新部分中的代码发送)。这可能是UAC问题吗? (我在一个Win 7盒子上测试) – evan 2011-04-23 21:09:51

+0

我重新启动了UAC禁用的计算机,它开始工作。然后,我在重新启用UAC后再次重新启动计算机,然后再次尝试该程序并运行。希望我能最终达到它的底部!尽管谢谢你的回答。 – evan 2011-04-23 23:19:59

+0

您是否有特别的理由期待与UAC相关的问题?如果您的应用程序和Word都以相同的用户身份运行,我不认为会出现这种问题。 – 2011-04-24 22:28:25

1

肯定埃文。 Microsoft Office Interop程序集让您可以从C#中完成任何操作! SendKeys()是一个问题。

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

我想我应该阐述有关的SendKeys():它甚至不可靠的工作了,因为它是一个主要的黑客工具。 MS Office互操作程序集允许您为每个Office组件执行大量的操作。我已经用MS Excel广泛地使用了它们,还有一些使用了Word,并且你可以做任何用户可以编程的东西。

+0

感谢您的帮助!按照您提供的链接,我已经到了某个地方。现在我只需要知道如何挂钩到活动词窗口(请参阅我的q更新)。你知道我可以这么做,或者你知道我在网上的一个例子,我错过了吗?再次感谢! – evan 2011-04-23 20:36:30

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