Zielstellung: Datenimport in eine vorhanden MySQL-Tabelle

Der Import von Excel-Daten ohne Programmieraufwand und mit den i.d.R. vorhanden Webdesigner-Tools wie phpMyAdmin ist möglich, aber doch nicht ganz so unkompliziert wie man denkt. Einer der wichtigen Gründe ist, dass Excel beim Speichern von CSV wenig Konfigurationsmöglichkeiten bietet und auch beim Import durch phpMyAdmin stehen kaum Konfigurationsmöglichkeiten zur Verfügung. Man ist also darauf angewiesen, dass beide Programme das liefern was man sich wünscht und muss dafür dann einfach deren "Spielregeln" einhalten.

Meine Tests habe dabei gezeigt, dass es ziemlich egal zu sein scheint, ob man nun aus dem Excel heraus erst eine CSV-Datei speichert und diese dann importiert, oder gleich direkt auf eine *.xls zugreift. Der Bequemlichkeit wg. nutze ich also gleich die xls-Datei und beziehe mich in meine Erläuterungen darauf.

Das größte Problem besteht darin die Daten in den Strukturen und vor allen Feldtypen zu erhalten wie wir uns unsere MySQL-Tabelle wünschen. Bei Import versucht phpMyAdmin möglichst intelligent zu entscheiden welcher Feldtyp und mit welcher Formatierung für die Daten geeignet ist. Das kann schon mal schief gehen und wg. der fehlenden Einflussnahmemöglichkeit müssen wir alternative Wege finden. Kritisch sind gerade mal Felder mit Decimalwerten oder auf PLZ, die gerne zum Integer umgewandelt werden, obwohl sie eigentlich besser als Zeichenkette (varchar) behandelt werden sollten (wg. evtl. führender Vornullen bei deutschen PLZ).

 

 

Hier nun meine Erfahrungen und ein paar Regeln zum Gelingen

Nachfolgende Erfahrungen und resultierende Regeln beziehen sich auf folgende Bedingungen:

  • MySQL-Server 5.5
  • phpMyAdmin 3.3
  • Excel-Datei gespeichert im Format *.xls (2003)

Alle drei nachfolgend genannte Bedingungen sind eng miteinander verbunden und führen nur gemeinsam zum Erfolg.



Datenstrukturen und Feldtypen

Es gibt die Möglichkeit den Import in eine bestehende MySQL-Tabelle oder in eine neue vorzunehmen. Wenn wir eine neue anlegen entscheidet phpMyAdmin autark über alle Strukturen. Das ist oft nicht zielführend, dann meistens brauchen wir doch sehr konkrete Strukturen, so wie unsere Scripte die Tabellen/Inhalte erwarten. Deshalb ist es besser gleich in eine bestehende Tabelle zu Importieren! Es wird also entweder mit phpMyAdmin eine Tabelle angelegt oder eine bestehende vorher geleert, aber es können auch Datensätze an eine bestehende evtl. schon gefüllte Tabelle angefügt werden.

Letztendlich ist die Nutzung einer bestehenden Tabelle der einzige Weg gewünschte Strukturen zu erhalten!

 

Tabellenname

Da wir dem Importfilter von phpMySQL nicht sagen können wie die Tabelle heißt in die wir importieren wollen, müssen wir folgenden Weg nutzen: Das Importscript verwendet den Tabellennamen in der Excel-Datei als Namen für die Importzieldatei. D.h.: in Excel müssen wir den Registerreiter für das Tabellenblatt doppelklicken und so benennen wie unsere MySQL-Zieltabelle heißt - exakt gleich! Wichtig: Der Dateiname der Excel-Datei ist für den Import völlig irrelevant!

 

Filter

Es hat sich als stabiler erwiesen die Tabellenspalten, die in Excel für den Export vorgesehen sind als Filter zu definieren. Dazu werden

  1. über jeder Spalte in der ersten Zeile der Feldname eingetragen der dem Feldnamen in der Ziel-MySQL-Tabelle entspricht und
  2. dann alle Spalten markiert und über Daten > Filter > Autofilter zu als Filter umgewandelt.

Den Erfolgt dieser Formatierung erkennen Sie im Excel dann daran, dass die Spalten-Feldname in unserer ersten Zeile nur Pulldownlisten sind.

Beim Import müssen wir dann darauf achten, dass wir kennzeichnen, dass die erste Zeile Feldnamen enthält (eine der wenigen Optionen für das Import-Script, s.u.).

 

Importeinstellungen

Nun gehen wir ins phpMyAdmin (einloggen) und klicken in der Tabellenübersichtsansicht auf den Registerreiter für die Funktion "Importieren". Hier wählen wir

  • bei der zu importierenden Datei unsere lokal liegende Exceltabelle aus,
  • beim Dateiformat das Format XSL 97-2003
  • und die Option "Spaltenname in der ersten Zeile"

Wenn der Import nun mit OK gestartet wird haben wir das Ergebenis in unserer Zieltabelle.

 

Ihre weitergehenden Tests

Wer möchte kann sicher auch noch mal folgendes testen:

  • ob der Dateiimport auch ohne Excel-Filter-Spalten funktioniert
  • ob eine erste Zeile mit Feldnamen wirklich zwingend notwendig ist
  • ob man evtl. in der Excel-Datei mehrere Tabellen anlegen kann und diese in einem Ruck in mehrere MySQL-Zieltabellen importieren kann.

Über ein Feedback kann gerne hier berichtet werden.