1

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

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

2 ответа2

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 - представляет значение ячейки до применения правила
ВЫХОД - представляет значение ячейки после применения правила

INPUT = ""
ВЫХОД = ""

INPUT = ""
ВЫХОД = ""

INPUT = "а"
ВЫХОД = "а"

INPUT = "a
             б»
ВЫХОД = "а
             б»

INPUT = "



"
ВЫХОД = ""

INPUT = "


с»
OUTPUT = "c"

INPUT = "



a

                          б»
ВЫХОД = "а

                          б»

1

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

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

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

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