Ich habe ein paar Word-Dokumente, die jeweils ein paar hundert Seiten mit wissenschaftlichen Daten enthalten, darunter:
- Chemische Formeln (H2SO4 mit allen korrekten tiefgestellten und hochgestellten Zeichen)
- Wissenschaftliche Zahlen (Exponenten, die mit hochgestellten Zeichen formatiert wurden)
- Viele mathematische Gleichungen. Geschrieben mit dem mathematischen Gleichungseditor in Word.
Das Problem ist, dass das Speichern dieser Daten in Word für uns nicht effizient ist. Deshalb möchten wir all diese Informationen in einer Datenbank (MySQL) speichern. Wir wollen die Formatierung nach LaTex konvertieren.
Gibt es eine Möglichkeit, mit VBA alle Tief-, Hoch- und Gleichungen in einem Word-Dokument zu durchlaufen?
microsoft-word
microsoft-word-2007
vba
Krallen
quelle
quelle
Antworten:
Ja da ist. Ich würde empfehlen, PowerShell zu verwenden, da es Word-Dateien recht gut verarbeitet. Ich denke, ich werde der einfachste Weg sein.
Weitere Informationen zu PowerShell und Word finden Sie hier: http://www.simple-talk.com/dotnet/.net-tools/com-automation-of-office-applications-via-powershell/
Ich habe etwas tiefer gegraben und dieses Powershell-Skript gefunden:
Speichern Sie es als .ps1 und starten Sie es mit:
Die gesamte DOC-Datei aus dem angegebenen Verzeichnis wird als HTML-Datei gespeichert. Also habe ich eine doc-Datei, in der ich Ihre H2SO4 mit Indizes und nach der Powershell-Konvertierung die Ausgabe folgt:
Wie Sie sehen können, haben Subskripte ihre eigenen Tags in HTML. Sie müssen also nur die Datei in Bash oder C ++ analysieren, um sie von Body zu Body zu schneiden, die in LATEX zu ändern und den Rest der HTML-Tags anschließend zu entfernen.
Daher habe ich in C ++ einen Parser entwickelt, der nach HTML-Indizes sucht und diese durch LATEX-Indizes ersetzt.
Der Code:
Für die HTML-Datei:
Die Ausgabe ist:
Es ist natürlich nicht ideal, aber der Genuss ist ein Proof of Concept.
quelle
Sie können die XML-Datei direkt aus jedem Office-Dokument extrahieren, das 2007+ ist. Dies geschieht auf folgende Weise:
word
Unterordner und derdocument.xml
Datei. Das sollte den gesamten Inhalt des Dokuments enthalten.Ich habe ein Beispieldokument erstellt und in den Body-Tags Folgendes gefunden (Anmerkung: Ich habe dies schnell zusammengestellt, sodass die Formatierung möglicherweise ein wenig verfälscht ist):
Es scheint, dass das
<w:t>
Tag für Text<w:rPr>
ist, das die Definition der Schriftart ist und das<w:p>
ein neuer Absatz ist.Das Wortäquivalent sieht folgendermaßen aus:
quelle
Ich habe einen anderen Ansatz als den von mnmnc verfolgt.
Meine Versuche, ein Test-Word-Dokument als HTML zu speichern, waren nicht erfolgreich. Ich habe in der Vergangenheit festgestellt, dass von Office generiertes HTML so voller Spreu ist, dass es nahezu unmöglich ist, die gewünschten Elemente auszuwählen. Ich habe festgestellt, dass dies hier der Fall ist. Ich hatte auch ein Problem mit Gleichungen. Word speichert Gleichungen als Bilder. Für jede Gleichung gibt es zwei Bilder, eines mit einer Erweiterung von WMZ und eines mit einer Erweiterung von GIF. Wenn Sie die HTML-Datei mit Google Chrome anzeigen, sehen die Gleichungen OK aus, sind aber nicht besonders gut. Die Darstellung entspricht der GIF-Datei, wenn sie mit einem Bildanzeige- / Bearbeitungswerkzeug angezeigt wird, das transparente Bilder verarbeiten kann. Wenn Sie die HTML-Datei mit dem Internet Explorer anzeigen, sehen die Gleichungen perfekt aus.
Zusätzliche Information
Ich hätte diese Information in die ursprüngliche Antwort aufnehmen sollen.
Ich habe ein kleines Word-Dokument erstellt, das ich als HTML gespeichert habe. Die drei Bereiche im Bild unten zeigen das ursprüngliche Word-Dokument, das HTML-Dokument, wie es von Microsoft Internet Explorer angezeigt wird, und das HTML-Dokument, wie es von Google Chrome angezeigt wird.
Wie bereits erläutert, ist der Unterschied zwischen den IE- und Chrome-Bildern darauf zurückzuführen, dass die Gleichungen zweimal gespeichert wurden, einmal im WMZ-Format und einmal im GIF-Format. Das HTML ist zu groß, um es hier anzuzeigen.
Das vom Makro erzeugte HTML ist:
Welche zeigt als:
Ich habe nicht versucht, die Gleichungen zu konvertieren, da das kostenlose MathType Software Development Kit anscheinend Routinen enthält, die in LaTex konvertiert werden
Der Code ist ziemlich einfach, also nicht viele Kommentare. Fragen Sie, ob etwas unklar ist. Hinweis: Dies ist eine verbesserte Version des Originalcodes.
quelle
Der einfachste Weg, dies zu tun, sind nur die folgenden Zeilen in VBA:
Dies findet den gesamten hochgestellten Text. Wenn Sie etwas damit anfangen möchten, fügen Sie es einfach in die Methode ein. Um zum Beispiel das Wort "super" in einem hochgestellten Text zu finden und es in "super found" umzuwandeln, verwenden Sie:
quelle