Wie Tabellendaten aus Worddokument für Datenbank auslesen?
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hallo Liste Ich habe die Aufgabe eine Liste mit Adressen aus einem Word-Dokument in eine MySQL-DB zu schreiben. Da es sich um ca. 7000 Einträge handelt, brauche ich ein Script dafür. Problem 1: Die Daten stehen nicht in einer Art Text-DB sondern in einem *.doc-File Problem 2: Die Einträge sind mit einer Tabelle formatiert. Ich habe zunächst versucht alles zu kopieren und in eine *.txt-Datei einzufügen. Dort wollte ich dann nach einem Muster suchen, um ein Script schreiben zu können. Da jedoch die Daten in einer Tabelle angeordnet sind (normale Tabelle kein Excel), sieht leider jede Zeile anders aus. Etliche Zellen der Tabelle enthalten verschiedene Anzahlen von Zeilen-Umbrüchen etc. Ein verlässliches Muster vermag ich beim besten Willen nicht zu erkennen. Ein Hexdump brachte mich auch nicht weiter und mit Antiword war sogar die Tabelle wieder da, nur halt mit ASCII-Sysmbolen zur Markierung der Zellen. Wer hat eine Idee, wie ich diese Daten in eine MySQL-Tabelle bekomme. CU Thorsten - -- Thorsten Körner | http://www.123tkShop.org openSource e-Commerce | http://www.123tk.com -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.2 (GNU/Linux) iD8DBQFAA0+qs5R35vLkl/cRApK8AJ90PXJzGwvfTdWeMWpvDfwgMg7JnwCePvSf lpCI6XQc6C+nVM7DML22Mjw= =HaUY -----END PGP SIGNATURE-----
Thorsten Körner am Dienstag, 13. Januar 2004 02:53:
Hallo Liste
Ich habe die Aufgabe eine Liste mit Adressen aus einem Word-Dokument in eine MySQL-DB zu schreiben. Da es sich um ca. 7000 Einträge handelt, brauche ich ein Script dafür. Problem 1: Die Daten stehen nicht in einer Art Text-DB sondern in einem *.doc-File
Problem 2: Die Einträge sind mit einer Tabelle formatiert.
Ich habe zunächst versucht alles zu kopieren und in eine *.txt-Datei einzufügen. Dort wollte ich dann nach einem Muster suchen, um ein Script schreiben zu können. Da jedoch die Daten in einer Tabelle angeordnet sind (normale Tabelle kein Excel), sieht leider jede Zeile anders aus. Etliche Zellen der Tabelle enthalten verschiedene Anzahlen von Zeilen-Umbrüchen etc. Ein verlässliches Muster vermag ich beim besten Willen nicht zu erkennen.
Ein Hexdump brachte mich auch nicht weiter und mit Antiword war sogar die Tabelle wieder da, nur halt mit ASCII-Sysmbolen zur Markierung der Zellen.
Wer hat eine Idee, wie ich diese Daten in eine MySQL-Tabelle bekomme.
Prima, vor einem ähnlichen Problem stehe ich auch bald. Allerdings mit erhöhtem Schwierigkeitsgrad: Die Daten stehen in ca. 300 Word-Dokumenten (Tabellen), wobei daraus auch noch zwei miteinander verknüpfte Tabellen gemacht werden müssen (Redundanz beseitigigen). Aber wenn alles in einer Tabelle ist, geht es halbwegs: in Word alles außerhalb der Tabelle eliminieren, dann alle Zeilenumbrüche entfernen (geht mit "Suchen und Ersetzen"), dann alle eventuell vorhandenen zukünftigen Feldtrenner (z.B. ;) in der zu erzeugenden Textdatei durch andere eindeutige Zeichen ersetzen und zuletzt die Tabelle in Text umwandeln (dabei kann man die Trennzeichen ";" zwischen den Feldern festlegen). Nun noch als Textdatei speichern (nicht im DOS-Text-Format, dann sind sogar die Zeilenumbrüche Unix-konform). Der Rest ist dann eine MySQL-Standardaufgabe. -- Gruß MaxX 8-)
Thorsten Körner am Dienstag, 13. Januar 2004 02:53:
Hallo Liste
Ich habe die Aufgabe eine Liste mit Adressen aus einem Word-Dokument in eine MySQL-DB zu schreiben. Da es sich um ca. 7000 Einträge handelt, brauche ich ein Script dafür. Problem 1: [...] Wer hat eine Idee, wie ich diese Daten in eine MySQL-Tabelle bekomme.
Prima, vor einem ähnlichen Problem stehe ich auch bald. Allerdings mit erhöhtem Schwierigkeitsgrad: Die Daten stehen in ca. 300 Word-Dokumenten (Tabellen), wobei daraus auch noch zwei miteinander verknüpfte Tabellen gemacht werden müssen (Redundanz beseitigigen). Houston wir haben ein Problem;-)
Aber wenn alles in einer Tabelle ist, geht es halbwegs: in Word alles außerhalb der Tabelle eliminieren, dann alle Zeilenumbrüche entfernen (geht mit "Suchen und Ersetzen"), dann alle eventuell vorhandenen zukünftigen Feldtrenner (z.B. ;) in der zu erzeugenden Textdatei durch andere eindeutige Zeichen ersetzen und zuletzt die Tabelle in Text umwandeln (dabei kann man die Trennzeichen ";" zwischen den Feldern festlegen). Nun noch als Textdatei speichern (nicht im DOS-Text-Format, dann sind sogar die Zeilenumbrüche Unix-konform). Der Tipp von Felix hat mich da auf eine einfachere Lösung gebracht. 1: Word-Doc in OpenOffice.org öffnen 2: Alles markieren (oder soviel, wie die Zwischenablage zulässt) und kopieren. 3: Kopierte Daten in OOo-Calc Tabelle einfügen. 4: Calc-Tabelle als CSV-Datei sichern 5: CSV-Datei in eine MySQL-Tabelle einfügen (als Hilfstabelle zur Zwischenspeicherung), die exakt die gleiche Struktur hat, wie die Datei 6: Normaliesieren mit Hilfe eines PHP-/Perl-/Python-Scriptes bzw.
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hallo Matthias Am Dienstag, 13. Januar 2004 07:30 schrieb Matthias Houdek: direct auf der MySQL-Console. Mit einem Basic-Macro im Writer müsstest Du die Umwandlung von *.doc in *.csv evtl automatisch hinbekommen. Dann könntest Du die über 300 Dateien vermittels einer Schleife in einem Bash-Script in die DB zaubern können. Hört sich doch gut an, oder. (Vielleicht ist es ja auch gut;-) CU Thorsten (Der gerade sehr gute Laune hat;-) - -- Thorsten Körner | http://www.123tkShop.org openSource e-Commerce | http://www.123tk.com -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.2 (GNU/Linux) iD8DBQFAA7lJs5R35vLkl/cRAmFYAJ0UpOpFKdYUFFPB0JZobi3p3Fz2yACfVLgI uRJMq52jBNouKscKMOdiVMg= =J3M5 -----END PGP SIGNATURE-----
Thorsten Körner am Dienstag, 13. Januar 2004 10:24:
Hallo Matthias
Am Dienstag, 13. Januar 2004 07:30 schrieb Matthias Houdek:
Thorsten Körner am Dienstag, 13. Januar 2004 02:53:
Hallo Liste
Ich habe die Aufgabe eine Liste mit Adressen aus einem Word-Dokument in eine MySQL-DB zu schreiben. Da es sich um ca. 7000 Einträge handelt, brauche ich ein Script dafür. Problem 1:
[...]
Wer hat eine Idee, wie ich diese Daten in eine MySQL-Tabelle bekomme.
Prima, vor einem ähnlichen Problem stehe ich auch bald. Allerdings mit erhöhtem Schwierigkeitsgrad: Die Daten stehen in ca. 300 Word-Dokumenten (Tabellen), wobei daraus auch noch zwei miteinander verknüpfte Tabellen gemacht werden müssen (Redundanz beseitigigen).
Houston wir haben ein Problem;-)
Oh, ja. Und das Schlimmste: Die Tabellen sind auch noch strukturiert, der Kopf ist anders unterteilt als die Daten da drunter. Aber im Kopf stehen auch Daten. Und sind die Tabellen auch teilweise noch "zerhackt", weil nicht beim Eintragen eines neuen Datensatzes einfach eine neue Zeile angefügt wird, sondern der Einfach halber die Zeile aus einem anderen Dokument kopiert wurde. Da stimmen aber die Spaltenbreiten nicht ganz exakt. Beim übernehmen der Tabelle in Excel (oder auch OOc-calc) kommen da teilweise die scuristen Konstruktionen bei raus. Ich glaube, die Daten abschreiben ist bald schneller :-(
Aber wenn alles in einer Tabelle ist, geht es halbwegs: in Word alles außerhalb der Tabelle eliminieren, dann alle Zeilenumbrüche entfernen (geht mit "Suchen und Ersetzen"), dann alle eventuell vorhandenen zukünftigen Feldtrenner (z.B. ;) in der zu erzeugenden Textdatei durch andere eindeutige Zeichen ersetzen und zuletzt die Tabelle in Text umwandeln (dabei kann man die Trennzeichen ";" zwischen den Feldern festlegen). Nun noch als Textdatei speichern (nicht im DOS-Text-Format, dann sind sogar die Zeilenumbrüche Unix-konform).
Der Tipp von Felix hat mich da auf eine einfachere Lösung gebracht. 1: Word-Doc in OpenOffice.org öffnen 2: Alles markieren (oder soviel, wie die Zwischenablage zulässt) und kopieren. 3: Kopierte Daten in OOo-Calc Tabelle einfügen. 4: Calc-Tabelle als CSV-Datei sichern
Den Umweg über OOo kannst du dir sparen, da du aus Word heraus direkt die Tabelle in eine CSV schreiben kannst (so die Tabelle normal ist *g*).
5: CSV-Datei in eine MySQL-Tabelle einfügen (als Hilfstabelle zur Zwischenspeicherung), die exakt die gleiche Struktur hat, wie die Datei 6: Normaliesieren mit Hilfe eines PHP-/Perl-/Python-Scriptes bzw. direct auf der MySQL-Console.
Das meinte ich mit MySQL-Standard-Aufgabe ;-)
Mit einem Basic-Macro im Writer müsstest Du die Umwandlung von *.doc in *.csv evtl automatisch hinbekommen. Dann könntest Du die über 300 Dateien vermittels einer Schleife in einem Bash-Script in die DB zaubern können.
Naja, so einfach ist das leider nicht. Im Tabellenkopf stehen jeweils die Stammdaten und in der Tabelle darunter dann mehrere Datensätze zu dieser Hauptentität. Das wird schon ein wenig komplexer. Ich brächte da wohl mal dringend ein paar Praktikanten mit Schreibmaschinenkenntnissen *g*. -- Gruß MaxX 8-)
Matthias Houdek am Dienstag, 13. Januar 2004 18:21:
Thorsten Körner am Dienstag, 13. Januar 2004 10:24:
Hallo Matthias
Am Dienstag, 13. Januar 2004 07:30 schrieb Matthias Houdek:
Thorsten Körner am Dienstag, 13. Januar 2004 02:53: [...] Aber wenn alles in einer Tabelle ist, geht es halbwegs: in Word alles außerhalb der Tabelle eliminieren, dann alle Zeilenumbrüche entfernen (geht mit "Suchen und Ersetzen"), dann alle eventuell vorhandenen zukünftigen Feldtrenner (z.B. ;) in der zu erzeugenden Textdatei durch andere eindeutige Zeichen ersetzen und zuletzt die Tabelle in Text umwandeln (dabei kann man die Trennzeichen ";" zwischen den Feldern festlegen). Nun noch als Textdatei speichern (nicht im DOS-Text-Format, dann sind sogar die Zeilenumbrüche Unix-konform).
Der Tipp von Felix hat mich da auf eine einfachere Lösung gebracht. 1: Word-Doc in OpenOffice.org öffnen 2: Alles markieren (oder soviel, wie die Zwischenablage zulässt) und kopieren. 3: Kopierte Daten in OOo-Calc Tabelle einfügen. 4: Calc-Tabelle als CSV-Datei sichern
Den Umweg über OOo kannst du dir sparen, da du aus Word heraus direkt die Tabelle in eine CSV schreiben kannst (so die Tabelle normal ist *g*).
5: CSV-Datei in eine MySQL-Tabelle einfügen (als Hilfstabelle zur Zwischenspeicherung), die exakt die gleiche Struktur hat, wie die Datei 6: Normaliesieren mit Hilfe eines PHP-/Perl-/Python-Scriptes bzw. direct auf der MySQL-Console.
Das meinte ich mit MySQL-Standard-Aufgabe ;-)
Zur Umwandlung in CSV: Sorge im Vorfeld dafür, dass in der Tabelle keine Semikolon (oder was du sonst als Trennzeichen zwischen den Feldern verwenden willst) vorkommen. Andernfalls zerhaust du dir beim Speichern als CSV-Datei die gesamte Struktur. Deswegen auch mein Hinweis oben, zuerst mit "Suchen und Ersetzen" diese Zeichen zu entfernen/auszutauschen. Das kannst du natürlich auch mit OOo-Calc machen - aber man sollte es nicht vergessen. Auch wenn man sich sicher ist, das solche Zeichen nicht vorkommen. Murphy schläft nie! *g* -- Gruß MaxX 8-)
Thorsten Körner wrote:
Hallo Liste
Ich habe die Aufgabe eine Liste mit Adressen aus einem Word-Dokument in eine MySQL-DB zu schreiben. Da es sich um ca. 7000 Einträge handelt, brauche ich ein Script dafür. Problem 1: Die Daten stehen nicht in einer Art Text-DB sondern in einem *.doc-File
Problem 2: Die Einträge sind mit einer Tabelle formatiert.
Ich habe zunächst versucht alles zu kopieren und in eine *.txt-Datei einzufügen. Dort wollte ich dann nach einem Muster suchen, um ein Script schreiben zu können. Da jedoch die Daten in einer Tabelle angeordnet sind (normale Tabelle kein Excel), sieht leider jede Zeile anders aus. Etliche Zellen der Tabelle enthalten verschiedene Anzahlen von Zeilen-Umbrüchen etc. Ein verlässliches Muster vermag ich beim besten Willen nicht zu erkennen.
Wie wurden die Adressen bisher benutzt? Serienbrief? Dann gäbe es vielleicht die Möglichkeit noch ein letztes Mal Word zu starten und einen Serienbrief zu erstellen, der die Felder in 'Tags' bettet und auf einem 'Generic/Nur Text' Drucker ausgiebt. Diese Ausgabe in eine Datei umleiten und Du hast eine ASCII-Datei, die Du mit z.B. Perl weiterbearbeiten kannst. Alternativ kannst Du wahrscheinlich in VBA ein Programm schreiben, dass die Tabelle Zelle für Zelle durchwandert und die Daten in ein halbwegs vernünftiges Format schreibt. Dein Fall ist ein Beispiel dafür, dass sich ordentlichen Datenbankdesign irgentwann mal auszahlt :) Viel Glück, Stefan PS: Nein, ich bin kein Experte in MS-Office. Weitere Deteils weiß ich nicht und wären hier auch OT.
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hallo Stefan Am Dienstag, 13. Januar 2004 08:35 schrieb Stefan Waidele jun.:
Thorsten Körner wrote:
Hallo Liste
Ich habe die Aufgabe eine Liste mit Adressen aus einem Word-Dokument in eine MySQL-DB zu schreiben. Da es sich um ca. 7000 Einträge handelt, brauche ich ein Script dafür. Problem 1: Die Daten stehen nicht in einer Art Text-DB sondern in einem *.doc-File
Problem 2: Die Einträge sind mit einer Tabelle formatiert.
Ich habe zunächst versucht alles zu kopieren und in eine *.txt-Datei einzufügen. Dort wollte ich dann nach einem Muster suchen, um ein Script schreiben zu können. Da jedoch die Daten in einer Tabelle angeordnet sind (normale Tabelle kein Excel), sieht leider jede Zeile anders aus. Etliche Zellen der Tabelle enthalten verschiedene Anzahlen von Zeilen-Umbrüchen etc. Ein verlässliches Muster vermag ich beim besten Willen nicht zu erkennen.
Wie wurden die Adressen bisher benutzt? Serienbrief?
Dann gäbe es vielleicht die Möglichkeit noch ein letztes Mal Word zu starten und einen Serienbrief zu erstellen, der die Felder in 'Tags' bettet und auf einem 'Generic/Nur Text' Drucker ausgiebt. Diese Ausgabe in eine Datei umleiten und Du hast eine ASCII-Datei, die Du mit z.B. Perl weiterbearbeiten kannst.
Alternativ kannst Du wahrscheinlich in VBA ein Programm schreiben, dass die Tabelle Zelle für Zelle durchwandert und die Daten in ein halbwegs vernünftiges Format schreibt. Danke für Deinen Tipp. Ich hab mich aber für eine Lösung entschieden, die auf dem Tipp von Felix basiert.
Dein Fall ist ein Beispiel dafür, dass sich ordentlichen Datenbankdesign irgentwann mal auszahlt :)
Da hast Du wohl Recht. Allerdings handelt es sich beim Kunden um ein kleines Büro, und welche Sekretärin kennt sich mit Datenbank-Design aus. Die haben halt irgendwann einmal begonnen diese Datei anzulegen, als die "Welt noch überschaubar" war.
Viel Glück,
Danke CU Thorsten - -- Thorsten Körner | http://www.123tkShop.org openSource e-Commerce | http://www.123tk.com -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.2 (GNU/Linux) iD8DBQFAA7p9s5R35vLkl/cRAvZxAKCXVljuYXdWosZZBccPL4KyF1OI/wCeKl8H FARz74ussk6bIDp8fClyUVw= =Ko1P -----END PGP SIGNATURE-----
Hallo Liste
Ich habe die Aufgabe eine Liste mit Adressen aus einem Word-Dokument in eine MySQL-DB zu schreiben. Da es sich um ca. 7000 Einträge handelt, brauche ich ein Script dafür. Problem 1: Die Daten stehen nicht in einer Art Text-DB sondern in einem *.doc-File
Problem 2: Die Einträge sind mit einer Tabelle formatiert.
Ich habe zunächst versucht alles zu kopieren und in eine *.txt-Datei einzufügen. Dort wollte ich dann nach einem Muster suchen, um ein Script schreiben zu können. Da jedoch die Daten in einer Tabelle angeordnet sind (normale Tabelle kein Excel), sieht leider jede Zeile anders aus. Etliche Zellen der Tabelle enthalten verschiedene Anzahlen von Zeilen-Umbrüchen etc. Ein verlässliches Muster vermag ich beim besten Willen nicht zu erkennen.
Ein Hexdump brachte mich auch nicht weiter und mit Antiword war sogar die Tabelle wieder da, nur halt mit ASCII-Sysmbolen zur Markierung der Zellen.
Wer hat eine Idee, wie ich diese Daten in eine MySQL-Tabelle bekomme.
Wenn ich dich richtig verstanden habe, geht es doch nur darum, die Tabelle in OpenOffice calc zu bringen. Das kannst du tun, in dem du sie Inhalte der Tabelle markierst, kopiert und dann in calc einfügst. Dort kannst du die Tabelle als csv-Datei speichern und diese müßte sich relativ einfach in MySQL einlesen lassen. Felix
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hallo Felix Am Dienstag, 13. Januar 2004 08:35 schrieb Felix Eschenburg:
Hallo Liste
Ich habe die Aufgabe eine Liste mit Adressen aus einem Word-Dokument in eine MySQL-DB zu schreiben. Da es sich um ca. 7000 Einträge handelt, brauche ich ein Script dafür. Problem 1: [...] Wer hat eine Idee, wie ich diese Daten in eine MySQL-Tabelle bekomme.
Wenn ich dich richtig verstanden habe, geht es doch nur darum, die Tabelle in OpenOffice calc zu bringen. Das kannst du tun, in dem du sie Inhalte der Tabelle markierst, kopiert und dann in calc einfügst. Dort kannst du die Tabelle als csv-Datei speichern und diese müßte sich relativ einfach in MySQL einlesen lassen. Felix BINGO: Genau das wars anscheinend. Ich habe das eben mit einer kleinen Beispieldatei versucht und es klappt hervorragend.
CU Thorsten - -- Thorsten Körner | http://www.123tkShop.org openSource e-Commerce | http://www.123tk.com -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.2 (GNU/Linux) iD8DBQFAA67Fs5R35vLkl/cRAsutAJoCotl22CXNBi/13o78A7y5vna3FgCdGzYL kKwxq9kkV2raGXLL3HfLB1I= =jFrO -----END PGP SIGNATURE-----
participants (4)
-
Atropin75@t-online.de
-
Matthias Houdek
-
Stefan Waidele jun.
-
Thorsten Körner