Проблема с добавлением дополнительного пространства перед вставкой файла методом InsertFile - PullRequest
0 голосов
/ 25 августа 2018

У меня возникла проблема при вставке файла в текстовый документ (основной документ) с использованием метода InsertFile с использованием созданного мной макроса Word VBA, в котором вставляется дополнительный пробел слева от абзаца, который я пытаюсь вставить в документ. Документ, в который я пытаюсь вставить, настроен с несколькими закладками, которые либо удаляют, либо сохраняют абзацы, и, как предполагается, сохраняют интервал между абзацами. По любой причине При вставке файла он добавляет не только это дополнительное пространство, но также добавляет дополнительные строки после абзаца. Просто чтобы вы знали, что у меня включены пробелы, какое слово представляет собой точки.

Ниже приведена структура основного документа, в который я вставляю весь текст (я вычеркнул текст из абзаца, который всегда находится в основном документе, анонимизировал текст): enter image description here

Причина, по которой закладка среднего абзаца не установлена ​​на ту же строку, что и предыдущий абзац, заключается в том, что когда я пытаюсь вставить разрыв строки перед вставкой файла, он не добавляет разрывы строк и просто печатает текст в предыдущий абзац, когда я действительно хочу их отделить. Самое странное, что разрывы строк работают для других абзацев, которые не вставляют текст из файла ...

Файл, который я пытаюсь вставить, представляет собой просто текстовый документ, состоящий из одного абзаца текста, в котором отсутствует пробел перед первым словом абзаца, но при вставке этот пробел добавляется. Вот изображение проблемы с основным документом после всех вставок (анонимный текст с объяснениями проблемы):

enter image description here

Мой код сначала устанавливает закладку в переменную диапазона, затем устанавливает пустым текст закладки (по существу, удаляя закладку), а затем использует эту переменную диапазона для вставки файла, жесткого кода или поля базы данных. Код прекрасно работает для поля текста или базы данных, но добавляет это дополнительное пространство при вставке текста из файла. Вот код, который я использую для вставки файла в мой основной документ:

 BookmarkRange.InsertFile (FiletoInsert)

У меня вопрос, есть ли способ избежать этого лишнего пространства? Или, если нет, мне просто нужно выяснить диапазон для этого дополнительного пространства, а затем удалить его после вставки? Дайте мне знать, если вам нужна дополнительная информация для ответа на этот вопрос.

1 Ответ

0 голосов
/ 25 августа 2018

Я не могу продублировать пробел, который вы видите при вставке файла, если только этот файл не содержит пробел в качестве первого символа.

Когда вы вставляете файл, последний вставленный символ будетзнак абзаца, который объясняет, почему текст, следующий за тем, что вы вставляете, «перемещается вниз».Если вы получаете более одного нового абзаца, то файл, который вы вставляете, содержит несколько «пустых» абзацев в конце.

Существует две возможности для добавления файла и подавления этого знака абзаца:

  1. Добавьте текст в файл, который вы хотите ввести. InsertFile имеет параметр Range, который позволяет вам указать имя закладки в файле и вставить только содержимое закладки:

    rngBookmark.InsertFile "C:\Test\Test_Centered.docx", "test3"
    
  2. Удалить абзац после вставки файла.Range.InsertFile покидает диапазон в начальной точке.Таким образом, второй диапазон необходим, чтобы отметить точку, которая следует за вставленным содержимым.

    Sub InsertFileNoLeadingSpace()
      Dim rngBookmark As Word.Range, rngAfterBookmark As Word.Range
    
      Set rngBookmark = ActiveDocument.Bookmarks("test1").Range
      Set rngAfterBookmark = rngBookmark.Duplicate
      rngAfterBookmark.Collapse wdCollapseEnd
      'Move one character further so that the Range is beyond the inserted content
      rngAfterBookmark.MoveStart wdCharacter, 1
      rngBookmark.InsertFile "C:\Test\Test_Centered.docx"
      'Move it back by two in order to pick up the inserted paragraph mark
      rngAfterBookmark.MoveEnd wdCharacter, -2
      'If the position after the inserted content is required after deleting the paragraph mark
      'this next line is necessary because deleting the paragraph mark
      'sets rngAfterBookmark to another location - it doesn't remain where you'd think
      Set rngBookmark = rngAfterBookmark.Duplicate
      rngAfterBookmark.Delete
      rngBookmark.Select
    End Sub
    
...