VB 2010 Открыть документ Word

Мне нужно открыть существующий документ Word из моего приложения VB 2010 и определить, когда пользователь закрыл документ, чтобы скопировать этот документ в базу данных, независимо от того, изменил его пользователь или нет. Как мне это сделать? Спасибо.

Пример:

'Code here
Dim word as New Word.Application()
Dim doc as New Word.Document()

'open the document here and let the user work on the word document
'detect when user has closed Word
'copy the word document into database

person D. Bermudez    schedule 23.10.2012    source источник


Ответы (3)


Я редактирую это, чтобы показать полное решение кода, это также завершает работу приложения.

Imports Microsoft.Office.Interop

Class MainWindow
    Private WithEvents doc As Word.Document
    Private app As New Word.Application
    Public Sub New()

        InitializeComponent()

        app.Visible = True
        app.Documents.Add()
        doc = app.Documents(1)
        doc.Activate()
    End Sub

    Private Sub doc_Close() Handles doc.Close
        app.Quit()
    End Sub
End Class
person PatFromCanada    schedule 23.10.2012
comment
Это не работает. Объект Word.Document не имеет события .Close. Он есть только у объекта Word.Application. - person D. Bermudez; 24.10.2012
comment
Вы объявили Word.Document With Events? Я запустил этот код в VS 2010 с помощью Word 2007, он работал нормально. Я не использую библиотеку Office.interop. - person PatFromCanada; 24.10.2012
comment
Теперь, когда у меня есть код, я вижу, что ошибался насчет взаимодействия. - person PatFromCanada; 24.10.2012
comment
Однако вы на правильном пути... Word.Application имеет события DocumentBeforeClose и DocumentBeforeSave, которые служат моей цели. - person D. Bermudez; 26.10.2012
comment
Вы просили определить, когда пользователь закрыл документ - person PatFromCanada; 26.10.2012
comment
Да, но я ожидал другого имени события, такого как onClose или Closing, но на самом деле DocumentBeforeclose — это то, что я ищу. Спасибо! - person D. Bermudez; 26.10.2012

Вот пример того, как создать новый документ. Может быть, это поможет вам начать?

http://support.microsoft.com/kb/316383

Еще один хороший пример:

http://www.codeproject.com/Articles/55685/Word-Automation-using-VB-NET-Part-I

person lhan    schedule 23.10.2012
comment
Отличный учебник ... но есть ли способ добавить document.OnClosing или подобное событие, чтобы определить, когда документ был закрыт или сохранен? Если я использую шаблон VB 2010 Word для создания документа, у меня не возникнет проблем с определением того, когда документ был закрыт. Однако я не вижу способа открыть документ, скажем, из события button.click и назначить какое-то событие OnClose. - person D. Bermudez; 24.10.2012
comment
Итак, вы хотите открыть документ нажатием кнопки, назначенной событию OnClose (предположительно открытие документа после закрытия другого)? - person lhan; 24.10.2012
comment
Я хочу нажать кнопку, открыть документ, и когда документ закрывается, обнаруживать, что документ был закрыт, поэтому я могу создать код, чтобы справиться с этим .docx в поле в таблице базы данных - person D. Bermudez; 24.10.2012
comment
Согласно этой статье, существует событие Document_Close, которое вы должны иметь возможность обработать, хотя далее говорится, что вы не можете выполнять условный код в зависимости от того, выбирают ли они да, нет или отмену при сохранении изменений. диалог. vbforums.com/showthread.php?569305-Catch- близкое событие в Word - person lhan; 24.10.2012

это будет работать, хотя это может быть не лучший выбор:

  1. прежде чем открывать файл документа, получите pid всех процессов (например, pid в taskmgr). каждый открытый файл слова имеет pid.

  2. теперь есть поток, проверяйте это через определенный интервал, если pid больше не существует, файл документа закрывается.

не элегантное решение, но в нашем проекте работает

person urlreader    schedule 23.10.2012
comment
Ваше предложение как бы отвечает на мой следующий вопрос: как убить базовый процесс Word, который остается открытым при вызове Word из Visual Studio. - person D. Bermudez; 24.10.2012