
Gibt es in Microsoft Word eine Lösung mit regulären Ausdrücken, um Zellgrenzen abzugleichen?
Ich hatte kürzlich eine Tabelle mit mehreren Zellen, die mit einem Leerzeichen begannen, und ich musste diese entfernen. Leider ^
ist in .NET die Funktion zum Abgleichen des Zeichenfolgenanfangs verfügbar, in der Suchen-und-Ersetzen-Funktion von Word jedoch nicht. Auch ^p
ohne die Verwendung von Platzhaltern habe ich nicht gefunden, was ich brauchte.
Ich arbeite oft mit ähnlichen Dokumenten. Kann der reguläre Ausdruck von Word irgendwie mit Zellgrenzen umgehen? (Text finden, der sich über mehrere Zellen erstreckt, Zellenende abgleichen, nur in Tabellen suchen …)
Antwort1
Um Word nicht verlassen zu müssen, habe ich den folgenden Ansatz ausprobiert. Dieses Mal basiert er auf in VBA verfügbaren Regex.
Öffnen Sie den Visual Basic-Editor (Alt+F11).
Fügen Sie eine Referenz hinzu:
Extras --> Referenzen --> 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
Beispielausgaben dieser Funktion
INPUT – stellt den Zellenwert vor der Anwendung der Regel dar. OUTPUT
– stellt den Zellenwert nach der Anwendung der Regel dar.
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"
Antwort2
Ich habe versucht, das beschriebene Szenario nachzubilden, und Folgendes scheint bei mir zu funktionieren.
Schritte zum Neuerstellen:
1. Öffnen Sie Word 2007
2. Menüband.Einfügen.Tabelle-->2x2-Tabelle
3. Tabelle1.Zelle(0,0) = 'a', Tabelle1.C(0,1) = ' b', Tabelle1.Zelle(1,0) = ' c', Tabelle1.Zelle(1,1) = ' d'
4. Menüband.Einfügen.Tabelle-->2x2-Tabelle
5. Tabelle2.Zelle(0,0) = ' e', Tabelle2.C(0,1) = 'f', Tabelle2.Zelle(1,0) = ' g', Tabelle2.Zelle(1,1) = ' h'
6. Office-Schaltfläche.Speichern unter.Andere Formate-->Word-XML-Dokument (*.xml)
7. Öffnen Sie die Datei in Notepad++ (meine Version ist 6.6.9)
Beobachtungen:
1. Jede Tabelle befindet sich im Tag <w:tbl>, unabhängig davon, wie viele Tabellen wir im Word-Dokument erstellt haben
. 2. Wenn der Wert nicht mit einem Leerzeichen beginnt, hat er die folgende Struktur <w:t>myValue</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 das, was entfernt werden muss, ' xml:space="preserve"' UND Leerzeichen vor myValue sind.
2. Regex-Ersetzung ist erforderlich
Lösung:
1. In N++ drücken Sie Strg+H (oder Menü-->Suchen-->Ersetzen-->Registerkarte „Ersetzen“-->Suchmodus = „Regulärer Ausdruck“).
2. Lassen Sie bei „Ersetzen durch:“ den Wert leer und verwenden Sie bei „Suchen nach:“ diesen Ausdruck „(?<=xml:space="preserve">)(\s+)“ (// ohne Anführungszeichen) und klicken Sie auf „Alles ersetzen“.
3. Lassen Sie bei „Ersetzen durch:“ den Wert leer und verwenden Sie bei „Suchen nach:“ diesen Ausdruck „xml:space="preserve““ und klicken Sie auf „Alles ersetzen“.
4. Dokument speichern.
5. Dokument in Word öffnen
. 6. Als doc(x) speichern.