PHP gevorderde |
|
je kan perfect een .xls bestand uitlezen en daarna in je mysql database wegschrijven zelfs op een *NIX platform based server.
ik gebruik daar zelf namelijk een class voor die een .xls bestand correct uitleest en deze in een array propt die je dan weer kan uitlezen en wegschrijven naar een database.
De Reader Class: class.read_xls.php
Het oleread.inc bestand: oleread.inc
De Writer Class: class.write_xls.php
Het voordeel aan deze 2 classes is dat door gebruik van ole het toch mogelijk is op een *NIX platform op correcte wijze een .xls bestand uit te lezen en of aan te maken met formules, en al de andere voordelen zoals kolombreedte kleuren, relaties enz...
je zal een meerdimensionale array krijgen mat daarin ['cells'] en daarin staan de waardes uit de velden.
klein voorbeeld:
<?php
error_reporting(E_ALL);
include_once('./classes/class.xls_reader.php');
// ExcelFile($filename, $encoding);
$data = new Spreadsheet_Excel_Reader();
// Set output Encoding.
$data->setOutputEncoding('CP1250');
$data->read('data/xls/telenet lijsten/' . $iMonth . '/' . $sFilename);
error_reporting(E_ALL ^ E_NOTICE);
$aMaterials = array_slice($data->sheets[0]['cells'], 1);
$iCount = 0;
foreach ($aMaterials as $aValues) {
$transid = $aValues[1];
$itemcode = $aValues[2];
$desc = $aValues[3];
// verder uitlezen van de nodige velden per rij
// de query uitvoeren
if (mysql_query("INSERT INTO telenet_" . $iTechid . " (inst_telenet_transid, inst_telenet_itemcode, inst_telenet_itemid, inst_telenet_desc, inst_telenet_amount, inst_telenet_createdate, inst_telenet_createby, inst_telenet_subcode, inst_telenet_status, inst_telenet_transref, inst_telenet_transdate, inst_telenet_transtypename, inst_telenet_loccode) VALUES ('" . $transid . "', '" . $itemcode . "', '" . $itemid . "', '" . $desc . "', '" . $amount . "', '" . $createdate . "', '" . $createby . "', '" . $subcode . "', '" . $status . "', '" . $transref . "', '" . $transdate . "', '" . $transtypename . "', '" . $loccode . "')")) $iCount++;
?>
<?php include_once('./classes/class.xls_reader.php'); // ExcelFile($filename, $encoding); $data = new Spreadsheet_Excel_Reader(); // Set output Encoding. $data->setOutputEncoding('CP1250'); $data->read('data/xls/telenet lijsten/' . $iMonth . '/' . $sFilename); $aMaterials = array_slice($data->sheets[0]['cells'], 1); $iCount = 0; foreach ($aMaterials as $aValues) { $transid = $aValues[1]; $itemcode = $aValues[2]; $desc = $aValues[3]; // verder uitlezen van de nodige velden per rij // de query uitvoeren if (mysql_query("INSERT INTO telenet_" . $iTechid . " (inst_telenet_transid, inst_telenet_itemcode, inst_telenet_itemid, inst_telenet_desc, inst_telenet_amount, inst_telenet_createdate, inst_telenet_createby, inst_telenet_subcode, inst_telenet_status, inst_telenet_transref, inst_telenet_transdate, inst_telenet_transtypename, inst_telenet_loccode) VALUES ('" . $transid . "', '" . $itemcode . "', '" . $itemid . "', '" . $desc . "', '" . $amount . "', '" . $createdate . "', '" . $createby . "', '" . $subcode . "', '" . $status . "', '" . $transref . "', '" . $transdate . "', '" . $transtypename . "', '" . $loccode . "')")) $iCount++; ?>
success. |