3

В Microsoft Word 2013 в Windows 7 я постоянно сталкиваюсь со странным знаком абзаца, который не может быть правильно вставлен при копировании, что вызывает все виды проблем. К сожалению, я не знаю, как создать этот загадочный абзац, но вот файл, в котором он содержится: Загадочный абзац, который нельзя скопировать. Docx.zip (файл DOCX снова заархивирован для большей точности).

Загадочный знак абзаца отображается как обычная полоска (¶), когда я заставляю Microsoft Word отображать все непечатаемые символы - точно так же, как обычные метки абзаца. Тем не менее, это ведет себя странно:

  • Когда я выделяю весь текст и копирую его, скажем, в Блокнот, он заменяется символом пробела.
  • Загадочный абзац может встречаться в файлах DOCX или DOC. Когда я сохраняю файл в формате RTF и снова открываю его с помощью MS Word, вместо этого я получаю пробел. Когда я сохраняю файл как TXT, он преобразуется в обычный перевод строки.
  • Когда я использую диалог замены MS Word для замены всех меток абзаца («^ p») чем-то другим, тогда таинственные метки абзаца не будут заменены. Таким образом, они напоминают обязательный знак абзаца в конце любого файла MS Word.
  • Когда я открываю файл с другими приложениями, большинство из них вообще преобразует метку загадочного абзаца; например, Apple TextEdit.app или старый Microsoft Office Word Viewer:

    Скриншот TextEdit

    Но некоторые преобразуют его в обычный перевод строки; например, LibreOffice:

    Скриншот LibreOffice

Что это за загадочный абзац? Как я могу предотвратить это?

3 ответа3

4

Я полагаю, что моя догадка была верной, проблемные символы, которые вы видите, выглядят как стиль * nix новой строки (ASCII-код: 0D) или версии Apple (ASCII-код: 0A), тогда как Windows обычно использует комбинированное кодирование новой строки (Коды ASCII: 0D 0A). Я могу воссоздать проблему, создав текстовый файл и вручную отредактировав шестнадцатеричные значения этого файла, чтобы получить новые строки * nix. При открытии текстового файла в Word отображаются новые строки, как и ожидалось, а при попытке скопировать их в Блокнот (++) они отображаются в виде пробелов. Я даже скопировал их в файл, который вы опубликовали и сохранили, закрыл Word, снова открыл его и попытался скопировать и вставить текст, те же результаты. Другие программы, которые были написаны для переносимости (LibreOffice, OpenOffice, возможно, другие), имеют возможность использовать различные типы символов новой строки, что, скорее всего, не влияет на эту проблему.

Чтобы избавиться от них, вам, вероятно, придется использовать либо OpenOffice, либо LibreOffice и использовать регулярное выражение для их поиска; однако они не сохраняются как шестнадцатеричное значение 0D, поэтому я не уверен, какое значение вы должны использовать, чтобы найти символы.

4

Если посмотреть на ваш пример .docx, "знак загадочного абзаца" представлен элементом <w:cr/> , который описан в стандарте ISO OOXML (например, ISO29500-2012, часть 1) в разделе 17.3.3.4 как cr (Перевозка). Вернуть).

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

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

Один вопрос - как вы получаете <w:cr/> в свой документ. Я ожидаю, что есть несколько способов, но один из способов, который вы, безусловно, можете сделать, это использовать Find/Replace, чтобы заменить символ на « ^13 » (с отключенной опцией подстановочного знака).

Избавиться от них непросто, потому что если вы попытаетесь заменить ^ 13 чем-то, Word заменит все знаки абзаца. Если вы копируете / вставляете загадочный абзац в поле "Найти что", Word заменяет все пробелы. Даже в VBA кажется, что они выглядят как "13" символов, которые нелегко отличить от обычных символов знака абзаца.

Тем не менее, как первый пример решения, следующий VBA работает в последних версиях Windows Word:

Sub replaceCRinDocBody
' Replaces paragraph marks that correspond to <w:cr/> Elements 
' by a normal paragraph mark
' This only processes the document body, not headers/footers.
Dim l as Long
With ActiveDocument.Content.Characters
  For l = 1 to .Count
    If AscW(.Item(l)) = 13 Then
      If Instr(1,.Item.WordOpenXML,"<w:cr/>") > 0 Then
        .Item(l).Text = vbCr
      End If
    End If
  Next
End With
End Sub
-2

Специальный символ - это маркер отступа абзаца в Word. Чтобы удалить его, вы должны установить свою версию слова, чтобы не показывать форматирование. Как вы это делаете:

1) Нажмите кнопку Microsoft Office. Изображение кнопки «Office», а затем нажмите «Параметры Word».

2) Нажмите Показать.

3) В разделе «Всегда показывать эти метки форматирования на экране» снимите флажки для любых меток форматирования, которые вы не хотите постоянно отображать в своих документах.

MSDN Link для дальнейшего при необходимости

https://support.office.com/en-us/article/Show-or-hide-formatting-marks-c0460106-19d3-4441-986c-b655bffe6be4

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .