#vb.net #winforms #ms-word #office-interop
#vb.net #winforms #ms-word #office-взаимодействие
Вопрос:
Я пытаюсь скопировать весь текст из одного документа Word и заменить на другой документ Word. Я открыл и скопировал весь текст из исходного документа в Word.Range после того, как нашел текст, который необходимо заменить в целевом документе (с помощью Word.Range), и я заменил основанный диапазон на диапазон из исходного документа:
'Find and Replace in destination Document
Dim wordRangeFind As Word.Range = destWordDoc.Content
wordRangeFind.Find.Execute(findText)
wordRangeFind = wordRange
В debug я вижу, что wordRangeFind изменяется на wordRange, но destWordDoc.Content остается таким, каким он был. После destWordDoc.Save() я вижу файл без изменений.
Не могли бы вы написать мне, пожалуйста, как я могу сохранить Word.Range в документ Word.
Вот мои функции:
'Imports Word = Microsoft.Office.Interop.Word
Dim missing As Object = System.Reflection.Missing.Value
Dim sourceWordApp As Word.Application = New Word.Application()
sourceWordApp.Visible = False
'Open source Document
Dim sourceWordDoc As Word.Document = sourceWordApp.Documents.Open(sourceWordFile, missing, False,
missing, missing, missing,
missing, missing, missing,
missing, missing, missing,
missing, missing, missing, missing)
'Open destination Document
Dim destWordApp As Word.Application = New Word.Application()
destWordApp.Visible = False
Dim destWordDoc As Word.Document = destWordApp.Documents.Open(destWordFile, missing, False,
missing, missing, missing,
missing, missing, missing,
missing, missing, missing,
missing, missing, missing, missing)
destWordDoc.Activate()
'Get all text from source Document
Dim wordRange As Word.Range = sourceWordDoc.Range(missing, missing)
'Find and Replace in destination Document
Dim wordRangeFind As Word.Range = destWordDoc.Content
wordRangeFind.Find.Execute(findText)
wordRangeFind = wordRange
'Save and close dest Document
destWordDoc.Save()
destWordDoc.Close(missing, missing, missing)
sourceWordDoc.Close(missing, missing, missing)
Спасибо.
Ответ №1:
Я решил свою проблему иначе (без сохранения диапазона), но с помощью функций Copy () и Paste () . Вот мой код:
Dim missing As Object = System.Reflection.Missing.Value
Dim sourceWordApp As Word.Application = New Word.Application()
sourceWordApp.Visible = False
'Open source Document
Dim sourceWordDoc As Word.Document = sourceWordApp.Documents.Open(sourceWordFile, missing, False,
missing, missing, missing,
missing, missing, missing,
missing, missing, missing,
missing, missing, missing, missing)
'Open destination Document
Dim destWordApp As Word.Application = New Word.Application()
destWordApp.Visible = False
Dim destWordDoc As Word.Document = destWordApp.Documents.Open(destWordFile, missing, False,
missing, missing, missing,
missing, missing, missing,
missing, missing, missing,
missing, missing, missing, missing)
destWordDoc.Activate()
'Copy all text from source Document
sourceWordApp.ActiveWindow.Selection.WholeStory()
sourceWordApp.ActiveWindow.Selection.Copy()
'Find in destination Document
Dim wordRangeFind As Word.Range = destWordDoc.Content
wordRangeFind.Find.Execute(findText)
wordRangeFind.Text = ""
wordRangeFind.Select()
'Paste copied text into dest document
destWordDoc.ActiveWindow.Selection.Paste()
'Save and close dest document
destWordDoc.Save()
destWordDoc.Close(missing, missing, missing)
sourceWordDoc.Close(missing, missing, missing)