
Existe uma solução de expressão regular no Microsoft Word para corresponder aos limites das células?
Recentemente tive uma tabela com várias células começando com um espaço e tive que removê-las, infelizmente ^
para corresponder ao início da string está disponível no .NET, mas não no word localizar e substituir; também ^p
sem usar curingas não encontrei o que precisava.
Da mesma forma, costumo trabalhar com documentos. O regex do Word é capaz de gerenciar os limites das células de alguma forma? (encontrar texto espalhado por várias células, corresponder ao final da célula, procurar apenas em tabelas...)
Responder1
Tentei a seguinte abordagem para evitar sair do Word. Desta vez é baseado em Regex disponível em VBA.
Abra o editor Visual Basic (Alt+F11)
Adicione referência:
Ferramentas -> Referências -> Expressões Regulares 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
Saídas exemplares desta função
INPUT - representa o valor da célula antes da regra ser aplicada
OUTPUT - representa o valor da célula após a regra ser aplicada
INPUT = ""
OUTPUT = "
" INPUT
= " "
OUTPUT = ""
INPUT = " a" OUTPUT = "a"
INPUT = " a
b"
SAÍDA = "a
b"
ENTRADA = "
" SAÍDA = "" ENTRADA =
" c" SAÍDA = "c" ENTRADA = " a b" SAÍDA = "a b"
Responder2
Tentei recriar o cenário descrito e o seguinte parece estar funcionando para mim.
Passos para recriar:
1. Abra o Word 2007
2. Ribbon.Insert.Table -> Tabela 2x2
3. Table1.Cell(0,0) = 'a', Table1.C(0,1) = 'b', Table1.Cell(1 ,0) = 'c', Tabela1.Cell(1,1) = 'd'
4. Ribbon.Insert.Table-->2x2 Tabela
5. Tabela2.Cell(0,0) = 'e', Tabela2.C (0,1) = 'f', Table2.Cell(1,0) = 'g', Table2.Cell(1,1) = 'h'
6. Botão Office.Salvar como.Outros Forats -> Word XML Documento (*.xml)
7. Abra o arquivo no Notepad++ (minha versão é 6.6.9)
Observações:
1. Cada tabela fica na tag <w:tbl>, independentemente de quantas tabelas criamos no documento Word
2. Se o valor não começar com um espaço, ele terá a seguinte estrutura <w:t>myValue</w: t>
3. Se o valor começar com um espaço então ele terá a seguinte estrutura <w:t xml:space="preserve"> myValue</w:t>
Conclusões:
1. Parece que o que precisa ser removido é 'xml:space="preserve"' E espaços antes de myValue
2. A substituição de Regex é necessária
Solução:
1. Em N++ digite Ctrl+H (ou Menu-->Search-->Replace-->Replace tab-->Search Mode = "Regular expression")
2. Em 'Replace With:' deixe o valor em branco e em 'Find what:' use esta expressão '(?<=xml:space="preserve">)(\s+)' (// excluindo aspas) e clique em 'Replace All'
3. Em 'Replace With:' deixe o valor em branco e em 'Encontre o que:' use esta expressão 'xml:space="preserve"' e clique em 'Substituir tudo'
4. Salve o documento
5. Abra o documento no Word
6. Salve como doc(x)