Excel naar MySQL
Hoe moet ik dit doen? Wie kan mij wat tips geven? Als ik op Google zoek dan zijn er allerlei vage programmaatjes die gegevens uit een excel bestand omzetten naar MySQL, maar of dat nu de oplossing is :-s
In welke richting moet ik het zoeken? Met name is het lastig dat het Excel bestand regelmatig wordt geupdate en ik dus ook de database tabel telkens moet updaten. Het zou bijvoorbeeld makkelijk zijn als ik het excel bestand in een mapje zou kunnen zetten en dan een of ander script kan aanroepen waardoor de gegevens in de database tabel worden vervangen door de gegevens uit het Excel bestand. Maar misschien kan zoiets wel in PHPMyAdmin? Ik zou in ieder geval graag wat tips krijgen aangezien ik totaal geen ervaring heb hoe ik gegevens vanuit Excel in MySQL krijg.
en die csv kan je openen met kladblok... niet weer openen met exel!
als je die opent zie je wel waar je op moet exploden.
openen met php
file_get_contents
vervolgens kun je exploden op /n en op ;(als het goed is)
en die gooi je met een insert into in je datbase
makkelijk zat als je weet hoe het moet...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
$file = file_get_contents('C:\wamp\www\exel\KOC.csv');
$regel = explode("\n",$file);
foreach($regel AS $line){
$info = explode(";",$line);
$naam = $info[0];
$adres = $info[1];
$postcode = $info[2];
$plaats = $info[3];
$contactpersoon = $info[4];
$telefoonnummer = $info[5];
$email = $info[6];
$website = $info[7];
?>
$file = file_get_contents('C:\wamp\www\exel\KOC.csv');
$regel = explode("\n",$file);
foreach($regel AS $line){
$info = explode(";",$line);
$naam = $info[0];
$adres = $info[1];
$postcode = $info[2];
$plaats = $info[3];
$contactpersoon = $info[4];
$telefoonnummer = $info[5];
$email = $info[6];
$website = $info[7];
?>
zal er zoiets uit komen te zien
Gewijzigd op 23/11/2010 15:24:47 door Teun Hesseling
Ik ga er mee aan de slag.
Toevoeging op 23/11/2010 16:17:00:
werkt goed hoor :-)
Code (php)
1
2
3
4
5
2
3
4
5
$handle = fopen($jouwbestand, "r");
while (($data = fgetcsv($handle, 10000, ";")) !== FALSE) {
}
while (($data = fgetcsv($handle, 10000, ";")) !== FALSE) {
}
Heel simpel, maar het werkt :)
Wat is het verschil tussen beide methoden en welke is aan te raden?
$data[0] is de eerste kolom, $data[1] de tweede enzovoort
Succes ermee!
Ik heb nog een 3e manier uitgevonden:
De variabele $file is nu een array waarbij iedere key één regel bevat en iedere regel een array met velden. Als ik de gegevens van veld 3 op regel 5 wil tonen, zeg ik echo $file[6][4].
Het voordeel ten opzichte van manier 1 is dat je niet van de string een array hoeft te maken via explode('\n', $file), omdat het al een array is. Hierdoor wordt de code al wat overzichtelijker en korter.
Ik vraag me wel af wat nu "beter" is. Als je alle gegevens in een database wil zetten zou je kunnen zeggen dat manier 2 beter is omdat je de data direct in de database plaatst en geen aparte array aanmaakt. Echter, manier 1 en 3 trekken in één keer het hele bestand binnen (in plaats van regel per regel inlezen) en splitsen het daarna pas op in velden. Gevoelsmatig zou ik zeggen dat dat veeeeel sneller gaat dan alles regel per regel doorlopen. Maar uiteindelijk moet je dan nog wel de array in de database zetten, maar omdat je de gegevens dan niet uitleest van het excel bestand zmaar vanuit het geheugen zou ik denken dat dat wel heel snel gaat. Waar zouden julie voor kiezen? Welke van de 3 manieren?
Toevoeging op 24/11/2010 10:23:58:
Iemand die hier nog iets zinnigs over kan zeggen welke van de 3 manieren de "beste" is? Of maakt het niet uit?
Gewijzigd op 24/11/2010 10:23:05 door Ozzie PHP
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Wie weet wat er mis gaat? Many thanks alvast!
Toevoeging op 14/01/2011 14:32:47:
Ben er al uit. Dit deed de truc (de laatste 2 regels):
Code (php)
Gewijzigd op 14/01/2011 13:55:51 door Ozzie PHP
Met PHPExcel kun je Excel documenten lezen en schrijven, bekijk anders de voorbeelden: http://phpexcel.codeplex.com/wikipage?title=Examples&referringTitle=Home
Terwijl ik me bedenk dat ik op je csv vraag geen antwoord gegeven heb heb je het zelf al gevonden. Hou er wel rekening mee dat je nu bij een eventuele error ook een headers already send error krijg op je development omgeving :p
Gewijzigd op 14/01/2011 14:41:29 door TJVB tvb
(csv bestand trouwens)
Lol, ik vul mij bericht aan en tijdens het versturen mail binnenkomen dat er een nieuw bericht is
Ja, het kan soms snel gaan! ;)
Echter, bij het invoegen van tel.nummers gaat het niet goed. In de database staat 0209999999, maar in het Excel bestand staat 209999999. Hij haalt die 0 er telkens af. Iemand een idee hoe ik dat dan kan voorkomen? Als ik het csv bestand emt kladblok open staat de 0 er wel bij... :(
Kolom type van excel veranderen van numeriek (cijfers) naar alphanumeriek (tekst).
helaas werkt dit niet omdat reeds bij het invoegen de 0 wordt gestript (super irritant). Ik ga het proberen op te lossen door het gebruik van een .txt bestand ipv .csv
De andere functies gooien bij een grote tabel in 1x je geheugen vol en daar wordt niemand gelukkig van...
Euhhh... waar heb jij het nu ineens over?
De file contents wil zeggen dat je het bestand eerst moet uploaden. Is er een andere weg hiervoor? Ik heb gekeken naar het allereerste voorbeeld.
Je zult het bestand altijd moeten uploaden, omdat de server erbij moet kunnen.