
¿Existe una solución de expresión regular en Microsoft Word para hacer coincidir los límites de las celdas?
Recientemente tuve una tabla con varias celdas que comenzaban con un espacio y tuve que eliminarlas; desafortunadamente, ^
hacer coincidir el comienzo de la cadena está disponible en .NET, pero no en Word Buscar y reemplazar; Además, ^p
sin usar comodines no encontré lo que necesitaba.
De manera similar, trabajo a menudo con documentos. ¿La expresión regular de Word puede administrar los límites de las celdas de alguna manera? (buscar texto que se distribuye en varias celdas, hacer coincidir el final de la celda, buscar solo en tablas...)
Respuesta1
Probé el siguiente enfoque para evitar salir de Word. Esta vez se basa en Regex disponible en VBA.
Abra el editor de Visual Basic (Alt+F11)
Agregue referencia:
Herramientas --> Referencias --> Expresiones regulares de 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
Resultados ejemplares de esta función
ENTRADA: representa el valor de la celda antes de aplicar la regla
SALIDA: representa el valor de la celda después de aplicar la regla
ENTRADA = ""
SALIDA
= ""
ENTRADA = " "
SALIDA = ""
ENTRADA = " a" SALIDA = "a"
ENTRADA = " a
b"
SALIDA = "a
b"
ENTRADA = " "
SALIDA = " " ENTRADA = " c" SALIDA = "c" ENTRADA = " a b" SALIDA = "a b"
Respuesta2
Intenté recrear el escenario descrito y lo siguiente parece funcionar para mí.
Pasos para recrear:
1. Abra Word 2007
2. Ribbon.Insert.Table-->2x2 Table
3. Table1.Cell(0,0) = 'a', Table1.C(0,1) = ' b', Table1.Cell(1 ,0) = 'c', Tabla1.Celda(1,1) = 'd'
4. Ribbon.Insert.Table-->2x2 Tabla
5. Tabla2.Celda(0,0) = 'e', Tabla2.C (0,1) = 'f', Table2.Cell(1,0) = 'g', Table2.Cell(1,1) = 'h'
6. Botón de Office.Guardar como.Otros formatos-->Word XML Documento (*.xml)
7. Abra el archivo en Notepad++ (mi versión es 6.6.9)
Observaciones:
1. Cada tabla se ubica en la etiqueta <w:tbl> independientemente de cuántas tablas hayamos creado en el documento de Word
. 2. Si el valor no comienza con un espacio, tiene la siguiente estructura <w:t>myValue</w: t>
3. Si el valor comienza con un espacio, entonces tiene la siguiente estructura <w:t xml:space="preserve"> myValue</w:t>
Conclusiones:
1. Parece que lo que hay que eliminar es 'xml:space="preserve"' Y espacios antes de myValue
2. Se requiere reemplazo de expresiones regulares
Solución:
1. En N++ escriba Ctrl+H (o Menú-->Buscar-->Reemplazar-->Reemplazar pestaña-->Modo de búsqueda = "Expresión regular")
2. En 'Reemplazar con:' deje el valor en blanco y en 'Buscar qué:' use esta expresión '(?<=xml:space="preserve">)(\s+)' (// excluyendo comillas) y haga clic en 'Reemplazar todo'
3. En 'Reemplazar con:' deje el valor en blanco y en 'Buscar qué:' use esta expresión ' xml:space="preserve"' y haga clic en 'Reemplazar todo'
4. Guarde el documento
5. Abra el documento en Word
6. Guarde como doc(x)