Как сохранить Word.Range в документ

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