Регулярное выражение для сопоставления границ ячеек

Регулярное выражение для сопоставления границ ячеек

Есть ли решение с регулярным выражением в Microsoft Word для сопоставления границ ячеек?
Недавно у меня была таблица с несколькими ячейками, начинающимися с пробела, и мне пришлось их удалить, к сожалению, ^сопоставление начала строки доступно в .NET, но не в Word, поиск и замена; также ^pбез использования подстановочных знаков не нашел то, что мне было нужно.

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

решение1

Я попробовал следующий подход, чтобы не выходить из Word. На этот раз он основан на Regex, доступном в VBA.

Откройте редактор Visual Basic (Alt+F11)
Добавьте ссылку:
Инструменты --> Ссылки --> Регулярные выражения Microsoft VBScript 5.5

Sub RemoveInitialSpacesInTablesCells()
Dim NoOfRows As Integer
Dim NoOfColums As Integer
Dim CellValue As Variant
Dim RegEx As RegExp
Dim Expr As String
Dim tbl As Table
Dim temp As String

Set RegEx = New RegExp
Expr = "^(\s+)"

For Each tbl In ActiveDocument.Tables
    NoOfRows = tbl.Rows.Count()
    NoOfColums = tbl.Columns.Count()
    For i = 1 To NoOfRows
        For j = 1 To NoOfColums
            CellValue = tbl.Cell(i, j)
            RegEx.Global = True
            RegEx.IgnoreCase = False
            RegEx.MultiLine = False
            RegEx.Pattern = Expr
            temp = RegEx.Replace(CellValue, "")
            If Len(temp) > 2 Then
                temp = Left(temp, Len(temp) - 2)
            End If
            tbl.Cell(i, j).Range.Text = temp
        Next j
    Next i
Next tbl
End Sub

Примеры результатов этой функции
INPUT - представляет значение ячейки до применения правила
OUTPUT - представляет значение ячейки после применения правила

INPUT = ""
OUTPUT = ""

INPUT = " "
OUTPUT = ""

INPUT = " a"
OUTPUT = "a"

INPUT = " a
             b"
OUTPUT = "a
             b"

INPUT = "



"
OUTPUT = ""

INPUT = "


c
" OUTPUT = "c"

INPUT = "



a

                          b"
OUTPUT = "a

                          b"

решение2

Я попытался воссоздать описанный сценарий, и, похоже, следующее мне помогло.

Шаги по воссозданию:
1. Откройте Word 2007
2. Лента.Вставка.Таблица-->Таблица 2x2
3. Таблица1.Ячейка(0,0) = 'a', Таблица1.C(0,1) = ' b', Таблица1.Ячейка(1,0) = ' c', Таблица1.Ячейка(1,1) = 'd'
4. Лента.Вставка.Таблица-->Таблица 2x2
5. Таблица2.Ячейка(0,0) = ' e', Таблица2.C(0,1) = 'f', Таблица2.Ячейка(1,0) = ' g', Таблица2.Ячейка(1,1) = ' h'
6. Кнопка Office.Сохранить как.Другие форматы-->Документ Word XML (*.xml)
7. Откройте файл в Notepad++ (моя версия 6.6.9)

Наблюдения:
1. Каждая таблица находится в теге <w:tbl> независимо от того, сколько таблиц мы создали в документе Word
. 2. Если значение не начинается с пробела, оно имеет следующую структуру: <w:t>myValue</w:t>
3. Если значение начинается с пробела, оно имеет следующую структуру: <w:t xml:space="preserve"> myValue</w:t>

Выводы:
1. Похоже, что нужно удалить «xml:space="preserve"» И пробелы перед myValue
2. Требуется замена регулярного выражения

Решение:
1. В N++ нажмите Ctrl+H (или Меню-->Поиск-->Заменить-->вкладка Замена-->Режим поиска = "Регулярное выражение")
2. В поле "Заменить на:" оставьте пустое значение, а в поле "Найти что:" используйте это выражение "(?<=xml:space="preserve">)(\s+)" (// без кавычек) и нажмите "Заменить все"
3. В поле "Заменить на:" оставьте пустое значение, а в поле "Найти что:" используйте это выражение "xml:space="preserve"" и нажмите "Заменить все"
4. Сохраните документ
5. Откройте документ в Word
6. Сохранить как doc(x)

Связанный контент