Für ein Projekt im Geschäft muss ich Daten von einer Excel Datei in eine mySQL Datenbank importieren. Das man im Excel nicht einfach sagen kann "Export zu mySQL" ist ja wohl klar. Also muss man das mit einem Script machen, ich benutze dazu PHP.
Das Problem ist ja bekanntlich nur das Auslesen der Daten aus der Excel Datei, das Schreiben in die DB geht mir PHP ja recht einfach von der Hand.
Eine Möglichkeit ist das Speichern der Excel Datei als XML und dann die XML Datei mit PHP zu lesen. Allerdings speichert Excel beim XML Export noch jede Menge zusätzlicher Informationen mit, die man nicht wirklich braucht, die Datei ist dann etwa doppelt so gross wie vorher und das lesen mit PHP Dauert auch ein weilchen.
Eine Alternative ist der PHP-ExcelReader. Damit kann man sehr einfach auf die Daten in Excel Dateien zugreifen. Das alles ohne einen mühsamen XML-Export und andere Verrenkungen. Hier möchte ich ein an einem kleinen Beispiel zeigen, wie man mit dem PHP-ExcelReader eine Excel Datei ausliest.
Als erstes muss man natürlich die ZIP Datei herunterladen und auf den Webserver kopieren. Dann kanns auch schon losgehen. Diese Datei muss nun natürlich auch eingebunden werden.
Das das ganze eine Klasse ist kann man nun ein neues Objekt erstellen und auch gleich die Datei öffnen.:
Da die Excel Dateien mehrere Tabellen (Worksheets) haben, muss man zuerst angeben, von welcher Tabelle man die Daten auslesen will. In diesem Beispiel wird mit einer Schleife jede Tabelle durchgegangen.
Mit den beiden Zeigern $worksheet und $sheet ist es nun ein leichtes die gewünschten Daten aus der Datei zu lesen. Nun aber noch ein komplettes Script, welches die Zeilen und Spalten der jeweiligen Tabelle und die Spaltenüberschriften ausgibt.
Beachten sollte man aber, dass so ein Script, je nach grösser der Excel Datei, einen grossen Speicher Verbrauch hat. Es macht also Sinn mit ini_set() das Memory-Limit etwas nach oben zu setzten, wenn man die Möglichkeit dazu hat.
Das Problem ist ja bekanntlich nur das Auslesen der Daten aus der Excel Datei, das Schreiben in die DB geht mir PHP ja recht einfach von der Hand.
Eine Möglichkeit ist das Speichern der Excel Datei als XML und dann die XML Datei mit PHP zu lesen. Allerdings speichert Excel beim XML Export noch jede Menge zusätzlicher Informationen mit, die man nicht wirklich braucht, die Datei ist dann etwa doppelt so gross wie vorher und das lesen mit PHP Dauert auch ein weilchen.
Eine Alternative ist der PHP-ExcelReader. Damit kann man sehr einfach auf die Daten in Excel Dateien zugreifen. Das alles ohne einen mühsamen XML-Export und andere Verrenkungen. Hier möchte ich ein an einem kleinen Beispiel zeigen, wie man mit dem PHP-ExcelReader eine Excel Datei ausliest.
Als erstes muss man natürlich die ZIP Datei herunterladen und auf den Webserver kopieren. Dann kanns auch schon losgehen. Diese Datei muss nun natürlich auch eingebunden werden.
<?
// Excel Reader einbinden
require_once("excel/reader.php");
?>
Das das ganze eine Klasse ist kann man nun ein neues Objekt erstellen und auch gleich die Datei öffnen.:
<?
// Objekt erstellen, Encoding definieren
$xls=new Spreadsheet_Excel_Reader();
$xls->setOutputEncoding("CP12522");
// Die Datei daten.xls oeffnen
$xls->read("daten.xls");
?>
Da die Excel Dateien mehrere Tabellen (Worksheets) haben, muss man zuerst angeben, von welcher Tabelle man die Daten auslesen will. In diesem Beispiel wird mit einer Schleife jede Tabelle durchgegangen.
<?
// durch die Worksheets gehen
$counter=0;
foreach($xls->boundsheets AS $worksheet )
{
$sheet=$xls->sheets[$counter];
// worksheet ist der Zeiger in die Info der Tabelle
// sheet ist der Zeiger in die Daten der Tabelle
$counter++;
}
?>
Mit den beiden Zeigern $worksheet und $sheet ist es nun ein leichtes die gewünschten Daten aus der Datei zu lesen. Nun aber noch ein komplettes Script, welches die Zeilen und Spalten der jeweiligen Tabelle und die Spaltenüberschriften ausgibt.
<?
ini_set('memory_limit', '10M');
// Excel Reader einbinden
require_once("excel/reader.php");
// Objekt erstellen, Encoding definieren
$xls=new Spreadsheet_Excel_Reader();
$xls->setOutputEncoding("CP12522");
// Die Datei daten.xls oeffnen
$xls->read("daten.xls");
// durch die Worksheets gehen
$counter=0;
foreach($xls->boundsheets AS $worksheet )
{
$sheet=$xls->sheets[$counter];
// worksheet ist der Zeiger in die Info der Tabelle
// sheet ist der Zeiger in die Daten der Tabelle
$cols=$sheet['numCols'];
$rows=$sheet['numRows'];
echo "<b>Arbeitsblatt ".($counter+1).": ".$worksheet['name']."</b><br />";
echo "hat: ".$rows." Zeilen und ".$cols." Spalten.";
// Schleife ueber die Daten der Zeile 1 (bzw. 0
$celldata=$sheet['cells'];
$headrow=1;
echo "<br /><br /><b>Spaltenueberschriften:</b><br />";
for($x=1;$x<=$cols;$x++)
{
echo $celldata[$headrow][$x]." : ";
}
$counter++;
echo "<br /><br />";
}
?>
Beachten sollte man aber, dass so ein Script, je nach grösser der Excel Datei, einen grossen Speicher Verbrauch hat. Es macht also Sinn mit ini_set() das Memory-Limit etwas nach oben zu setzten, wenn man die Möglichkeit dazu hat.