Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Отследить действия в WORD из VB.NET


Автор: swetik1981 22.7.2012, 00:13
Из VB.NET открывается вордовский документ: 

Код

Dim MSWord As New Word.Application 
Dim WordDoc As New Word.Document 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
 WordDoc = MSWord.Documents.Open("C:\Demo.Doc") 
 MSWord.WindowState = Word.WdWindowState.wdWindowStateNormal 
 MSWord.Visible = True 
End Sub


 После того, как пользователь сделал некоторые изменения в данном документе, мне необходимо передать информацию о них обратно в программу VB.NET. То есть мне надо отследить момент, когда пользователь осуществляет сохранение информации или закрывает документ. Это возможно? 

Автор: dstorm81 26.7.2012, 17:12
Цитата(swetik1981 @  22.7.2012,  00:13 Найти цитируемый пост)
когда пользователь осуществляет сохранение информации или закрывает документ


навскидку, мне незнакомому с net видится 2 варианта

1)эти действия будут контролироваться со стороны самого вордовского документа посредством этих самых макросов, но, имхо, макросы не всегда смогут сработать корректно отработать... (аварийное закрытие ворда например)

2) проверять самой программой, дать например окну специфическое название и мониторить его открыто/закрыто


а уместен ли такой изврат вообще?
не проще вывести диалоговую форму для заполнения.....подозрение что вы мудрите и усложняете

Автор: LOPUH 5.8.2012, 20:40
Почитайте о событиях в VBA...

Автор: diadiavova 13.8.2012, 00:46
Можно сделать так
Код

Imports Microsoft.Office.Interop
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim MSWord As New Word.Application
        AddHandler MSWord.DocumentBeforeSave, AddressOf MSWord_DocumentBeforeSave
        Dim WordDoc As New Word.Document
        WordDoc = MSWord.Documents.Open("C:\Demo.doc")
        MSWord.WindowState = Word.WdWindowState.wdWindowStateNormal
        MSWord.Visible = True
    End Sub

    Private Sub MSWord_DocumentBeforeSave(Doc As Microsoft.Office.Interop.Word.Document, ByRef SaveAsUI As Boolean, ByRef Cancel As Boolean)
        Me.Invoke(Sub() TextBox1.Text = Doc.Content.Text)
    End Sub

End Class


Здесь при сохранении документа, его содержимое заносится в текстбокс. 
А вообще, если программа написана не специально для обслуживания ворда, а ворд используется как редактор только лишь, то добавлять в нее ссылки на библиотеки ворда - не есть хорошо. Я бы тут сделал иначе. Открыть документ в ворде можно штатными методами
Код

Process.Start("Путь к ворду", "Путь к файлу документа")

Дальше можно в приложении разместить службу WCF, а для ворда написать надстройку и разместить в ней клиентскую часть службы. Надстройка отслеживает сохранение документа и сообщает приложении, возможно (если нужно) передает при  этом внесенные изменения или, скажем, весь документ для дальнейшей обработки.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)