Kürzlich stand ich auf der Arbeit vor der schmerzlichen Vorgabe, ein dutzendes Seiten umfassendes Word-Dokumenten nach Excel zu kopieren (das Dokument enthielt unzählige Tabellen im immer gleichen Aufbau). Anstelle jede Zelle mühsam einzeln nach Excel zu kopieren – was meine gesamte bisherige Ausbildung in Frage gestellt hätte – entschied ich mich dafür, das Word-Dokument als HTML abzuspeichern, den HTML-Code anzupassen und danach in Word zu importieren.
Bekanntermassen ist der von Word produzierte HTML-Code ungefähr so das schrecklichste, was ein Web-Entwickler jemals zu Gesicht bekommen wird. Zum Glück gibt es Web-Dienste wie WordOff, welche über ein Web-Form Word-HTML entgegennehmen, säubern und zum Download anbieten.
Da das Word-Dokument in meinem Falle aber die Bemerkung „Strictly Confidential“ enthielt, empfand ich dies dann doch eher als gewagter Stunt, der mir im schlimmsten Falle den Job hätte kosten können.
Ich entschied mich deshalb, den Python-Code für das Projekt von git herunterzuladen, anzupassen und danach lokal über das HTML-File laufen zu lassen.
Folgende Anpassung war in wordoff.py nötig:
... def superClean(str): clean = stripAttributes(str) cleaner = stripSpans(clean) cleaner = stripDivs(cleaner) #cleaner = xenophobia(cleaner) cleaner = stripEmptyElements(cleaner) cleaner = stripEmptyElements(cleaner) cleaner = stripEmptyElements(cleaner) cleaner = reduceLineBreaks(cleaner) return cleaner # Changes added by Mario Aeby, eMeidi.com # Allows to execute the script locally on a command line def main(): file = open("word-to-excel.htm"); str = file.read() print superClean(str) if __name__ == "__main__": main()
Dies erlaubt, das Script folgendermassen auf der Kommandozeile aufzurufen (die Quelldatei muss derzeit leider in den Sourceode hardkodiert werden):
$ ./wordoff.py > word-to-excel-clean.html
Nicht schlecht. Wer weiss, vielleicht lässt der Entwickler diese Anpassung ja auch ins Projekt einfliessen, damit man es künftig sowohl unter dem Django-Framework als auch lokal in einer Shell ausführen kann.