3

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

Скриншот

Удалить тривиальный пробел в конце строки тривиально (найдите " ^p" и замените на "^p"), но, похоже, нет специального символа для "маркера ячейки конца таблицы" в диалог поиска / замены, и движок Word "regex" не поддерживает якоря .

Поиск в Google привел меня к этому совету о том, как добавить что-то в конец ячейки таблицы (я планировал добавить что-то вроде "§§§" в каждую ячейку, а затем выполнить простой поиск / замену " §§§"), но в Word 2016 я не могу найти стиль "Ячейка таблицы", по крайней мере, в немецкой версии Word.

Любая другая идея, которую я мог бы попробовать? Кроме того, есть идеи, как удалить один или несколько пробелов в конце строки строки / таблицы? Кажется, квантификаторы не работают при поиске / замене без регулярных выражений.

2 ответа2

1

Хорошо, я копался в объектной модели Word VBA и придумал это (Microsoft VBScript Regular Expressions 5.5 включен):

Sub TrimCellSpaces()
    Dim myRE As New RegExp
    Dim itable As Table
    Dim C As Cell
    myRE.Pattern = "\s+(?!.*\w)"
    For Each itable In ThisDocument.Tables
        For Each C In itable.Range.Cells
            With myRE
                C.Range.Text = .Replace(C.Range.Text, "")
            End With
        Next
    Next
End Sub

Интересно, что моя первоначальная попытка (с использованием Trim(C.Range.Text)) не удалил пробелы, наоборот, он добавил маркер абзаца в конце каждой ячейки. Озадаченный этим, я попробовал регулярное выражение \s+$ с теми же результатами. Исследуя локальное дерево объектов, я обнаружил, что в ячейке, содержащей текст Note  самом деле содержится Note \x0d\x0d\x07 (с тех пор я выяснил, почему это так). Вот почему мне пришлось использовать это странное регулярное выражение, чтобы найти последние пробелы в ячейке ...

0

Я использую модификацию Тима Пицкера Sub, где я использую комбинацию Left() и Trim() вместо regExp (а также использую ActiveDocument вместо ThisDocument):

Sub TrimCellSpaces()
    Dim itable As Table
    Dim C As Cell
    For Each itable In ActiveDocument.Tables
        For Each C In itable.Range.Cells
            C.Range.Text = Trim(Left(C.Range.Text, Len(C.Range.Text) - 2))
        Next
    Next
End Sub

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