Ich habe nur begrenzte Erfahrung mit grundlegendem JavaScript-Regex, mit dem ich einige Benutzerdateneinträge manipuliert habe. Jetzt wurde ich gefragt, ob ich MS Word 2010-Dokumente manipulieren soll.
Insbesondere erhalten meine Benutzer eine lange numerische Liste der Daten als solche:
1. blah blah 'car' blah blah
2. blah blah 'truck' blah blah
3. blah blah 'boat' blah blah
Dies ist ein unformatiertes, einfaches Word-Dokument. Sie möchten nach jeder Ziffer eine formatierte Überschrift, basierend auf dem Artikel in einfachen Anführungszeichen, wie folgt:
1. CAR: blah blah 'car' blah blah
2. TRUCK: blah blah 'truck' blah blah
3. BOAT: blah blah 'boat' blah blah
Sie haben derzeit Schreibkräfte, die diese Änderungen manuell vornehmen (manchmal mit Fehlern). Mit Javascript / jQuery könnte ich Code schreiben, um diese Daten zu erfassen, nach Wörtern in Anführungszeichen zu suchen, die nächstgelegene Zahl vor dem Treffer zu finden und nach dem Zeitraum eine All-CAPS-Version davon einzufügen.
Ich habe jedoch nicht viel Erfahrung mit ähnlichen Funktionen in Word. Kann dies über ein Makro oder eine Art Skript erfolgen? Kann ich meinen Javascript / jQuery-Code schreiben und irgendwie in einer Word-Instanz ausführen lassen?
Danke für die Anleitung!
quelle
Antworten:
Ja! Microsoft Office VBA unterstützt die native Suche nach regulären Ausdrücken. Sie müssen "Microsoft VBScript Regular Expressions 5.5" als Referenz im VBA-Editor für jeden hinzufügen
.docm
,.xlsm
usw. Datei, in die Sie den Regex-Code einfügen möchten:Das meiste Objektmodell für dieses Regex-Modul befindet sich auf MSDN Hier . Eine Sache, die zu fehlen scheint, ist die
MultiLine
Rahmen.Sie verwenden es wie folgt:
Dim rx as New RegExp
rx.Global
,rx.MultiLine
, undrx.IgnoreCase
Fahnen wie gewünschtrx.Pattern
rx.Test(str)
, was zurückkehrtTrue
oderFalse
passendrx.Execute(str)
gibt a zurückMatchCollection
Objekt, das sich wie ein nullbasiertes eindimensionales Array von null oder mehr verhältMatch
ObjekteMatch
Objekte belichten dieFirstIndex
,Length
,Value
, undSubMatches
Eigenschaften.FirstIndex
ist der auf Null basierende Index des ersten Zeichens der Position instr
bei dem die Übereinstimmung gefunden wurdeLength
ist die Länge des übereinstimmenden Teils vonstr
Value
ist das Ergebnis der übereinstimmenden ZeichenfolgeSubMatches
ist ein nullbasiertes Array von Sub-Matched-Gruppen innerhalb des GesamtspielsIch glaube nicht, dass es einen Weg gibt, a
sed
Replace-in-Place-Vorgang im Stil einer reinen Suchfunktion. Es ist jedoch einfach genug, das umgebende VBA zu verwenden, um die Ergebnisse nach Ihren Wünschen zu bearbeiten.quelle
[VBA object of interest] site:msdn.microsoft.com
sind Ihr bester Freund, um Syntax- und andere Informationen über das Objektmodell herauszufinden. Viel Glück!Wenn es sich nur um Klartext im Word-Dokument handelt und es nicht sehr groß ist und Sie mit JQuery vertraut sind, können Sie eine einfache Site erstellen, auf der sie das Word-Dokument kopieren / einfügen und die erforderlichen Änderungen vornehmen und das transformierte Wort herunterladen können Dokumentieren Sie den gewünschten Text oder geben Sie ihn aus. Es hängt wirklich von mehr Details Ihrer Situation ab, um zu sagen, ob dies eine gute Lösung ist.
Das Makro könnte wahrscheinlich auch erstellt werden, es könnte jedoch schwierig sein, es für Benutzer bereitzustellen, je nachdem, wie viele Benutzer Sie hatten.
quelle
Falls Sie nicht VBA- oder Python-fähig sind und die @ hBy2Py-Antwortidee nicht zu Ihrer Kompetenz passt, versuchen Sie es mit Google Sheets / Excel, indem Sie Ihren Algorithmus implementieren:
=ARRAYFORMULA(UPPER(REGEXEXTRACT(A:A;"\'([a-z]+)")))
=UPPER(B:B)
=ARRAYFORMULA(REGEXREPLACE(A:A;"\.(\s)";". "&B:B&": "))
TLDR:
Eine andere Problemumgehung könnte die hier beschriebene Lösung sein: Suchen und Ersetzen in Notepad ++ mit Wildcards / Regex
quelle