Gibt es eine Lösung für reguläre Ausdrücke in Microsoft Word, um die Zellgrenzen abzugleichen?
Vor kurzem hatte ich eine Tabelle mit mehreren Zellen, die mit einem Leerzeichen anfingen, und ich musste sie entfernen ^. auch ^pohne Wildcards habe ich nicht das gefunden, was ich brauchte.
Ebenso arbeite ich oft mit Dokumenten. Kann Words Regex Zellgrenzen auf irgendeine Weise verwalten? (Finden von Text, der über mehrere Zellen verteilt ist, mit dem Ende der Zelle übereinstimmen, nur in Tabellen suchen ...)
Ich habe den folgenden Ansatz gewählt, um Word nicht zu verlassen. Dieses Mal basiert es auf Regex, das in VBA verfügbar ist.
Öffnen Sie den Visual Basic-Editor (Alt + F11).
Verweis hinzufügen:
Extras -> Verweise -> Microsoft VBScript Regular Expressions 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
Beispielhafte Ausgaben dieser Funktion
INPUT - repräsentiert den
Zellenwert, bevor die Regel angewendet wird OUTPUT - repräsentiert den Zellenwert, nachdem die Regel angewendet wurde
Danke, sieht gut aus! Ich habe es hochgestuft, aber noch ein bisschen gewartet, bevor ich es als Antwort akzeptiere, wenn jemand ohne VBA einen Weg finden könnte. Der Verweis auf Tabellenzeilen und -spalten funktioniert in Word VBA nicht, wenn einige Zellen zusammengeführt werden. Die Verwendung ist im Allgemeinen sicherer for each c in tbl.cells.
Máté Juhász
1
Ich habe versucht, das beschriebene Szenario wiederherzustellen, und das Folgende scheint für mich zu funktionieren.
Schritte zum
erneuten Erstellen :
1. Öffnen Sie Word 2007 2. Ribbon.Insert.Table -> 2x2 Table
3. Table1.Cell (0,0) = 'a', Table1.C (0,1) = 'b', Table1 .Cell (1,0) = 'c', Table1.Cell (1,1) = 'd'
4. Ribbon.Insert.Table -> 2x2 Table
5. Table2.Cell (0,0) = 'e' , Table2.C (0,1) = 'f', Table2.Cell (1,0) = 'g', Table2.Cell (1,1) = 'h'
6. Office Button.Save As.Other Forats- -> Word XML-Dokument (* .xml)
7. Öffnen Sie die Datei in Notepad ++ (meine Version ist 6.6.9). Anmerkungen
:
1. Jede Tabelle befindet sich im <w: tbl> -Tag, unabhängig davon, wie viele Tabellen in Word erstellt wurden Dokument
2. Wenn der Wert nicht mit einem Leerzeichen beginnt, hat er die folgende Struktur <w: t> meinWert </ w: t>
3. Wenn der Wert mit einem Leerzeichen beginnt, hat er die folgende Struktur: <w: t xml: space = "preserve"> myValue </ w: t>
Schlussfolgerungen:
1. Es scheint, dass 'xml' entfernt werden muss: space = "preserve" 'UND Leerzeichen vor myValue
2. Regex-Ersetzung ist erforderlich
Lösung:
1. Geben Sie in N ++ Strg + H (oder Menü -> Suchen -> Ersetzen -> Ersetzen-Tabulator -> Suchmodus = "Regular" ein expression ")
2. Lassen Sie bei 'Ersetzen durch:' den Wert leer und bei 'Suchen nach:' diesen Ausdruck verwenden '(? <= xml: space =" preserve ">) (\ s +)' (// ohne Anführungszeichen) und Klicken Sie auf "Alle ersetzen".
3. Lassen Sie bei "Ersetzen durch:" den Wert leer und bei "Suchen nach:" den Ausdruck "xml: space =" preserve "".und klicken Sie auf "Alle ersetzen".
4. Dokument speichern.
5. Dokument in Word öffnen.
6. Als Dokument speichern. (x)
Vielen Dank! Nizza Ansatz in der Tat. Mein einziges Problem ist, dass ich im Allgemeinen lange Dokumente (über 100 Seiten) mit Bildern, Bildunterschriften und Referenzen habe und befürchte, dass etwas während der Konvertierung in xml und zurück beschädigt wird.
for each c in tbl.cells
.Ich habe versucht, das beschriebene Szenario wiederherzustellen, und das Folgende scheint für mich zu funktionieren.
Schritte zum erneuten Erstellen :
1. Öffnen Sie Word 2007
2. Ribbon.Insert.Table -> 2x2 Table
3. Table1.Cell (0,0) = 'a', Table1.C (0,1) = 'b', Table1 .Cell (1,0) = 'c', Table1.Cell (1,1) = 'd'
4. Ribbon.Insert.Table -> 2x2 Table
5. Table2.Cell (0,0) = 'e' , Table2.C (0,1) = 'f', Table2.Cell (1,0) = 'g', Table2.Cell (1,1) = 'h'
6. Office Button.Save As.Other Forats- -> Word XML-Dokument (* .xml)
7. Öffnen Sie die Datei in Notepad ++ (meine Version ist 6.6.9). Anmerkungen
:
1. Jede Tabelle befindet sich im <w: tbl> -Tag, unabhängig davon, wie viele Tabellen in Word erstellt wurden Dokument
2. Wenn der Wert nicht mit einem Leerzeichen beginnt, hat er die folgende Struktur <w: t> meinWert </ w: t>
3. Wenn der Wert mit einem Leerzeichen beginnt, hat er die folgende Struktur: <w: t xml: space = "preserve"> myValue </ w: t>
Schlussfolgerungen:
1. Es scheint, dass 'xml' entfernt werden muss: space = "preserve" 'UND Leerzeichen vor myValue
2. Regex-Ersetzung ist erforderlich
Lösung:
1. Geben Sie in N ++ Strg + H (oder Menü -> Suchen -> Ersetzen -> Ersetzen-Tabulator -> Suchmodus = "Regular" ein expression ")
2. Lassen Sie bei 'Ersetzen durch:' den Wert leer und bei 'Suchen nach:' diesen Ausdruck verwenden '(? <= xml: space =" preserve ">) (\ s +)' (// ohne Anführungszeichen) und Klicken Sie auf "Alle ersetzen".
3. Lassen Sie bei "Ersetzen durch:" den Wert leer und bei "Suchen nach:" den Ausdruck "xml: space =" preserve "".und klicken Sie auf "Alle ersetzen".
4. Dokument speichern.
5. Dokument in Word öffnen.
6. Als Dokument speichern. (x)
quelle