2011-04-23 78 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); 
相關問題