Excel naar MySQL

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ozzie PHP

Ozzie PHP

23/11/2010 15:10:53
Quote Anchor link
Wie kan mij een beetje op weg helpen met het volgende. Ik heb in een website gegevens nodig afkomstig uit een Excel bestand. Deze gegevens moeten terecht komen in een MqSQL database tabel. Het Excel bestand wordt door een derde partij aangeleverd en om de week wordt het bestand door die derde partij gewijzigd. Zodra het Excel bestand is gewijzigd, moet de tabel in de database geupdate worden met de juiste gegevens. (De MySQL database tabel moet telkens idem zijn aan het Excel bestand.)

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.
 
PHP hulp

PHP hulp

26/11/2024 01:10:32
 
Teun Hesseling

Teun Hesseling

23/11/2010 15:18:16
Quote Anchor link
je exel bestand opslaan als csv.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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];
?>

zal er zoiets uit komen te zien
Gewijzigd op 23/11/2010 15:24:47 door Teun Hesseling
 
Ozzie PHP

Ozzie PHP

23/11/2010 15:35:51
Quote Anchor link
Dankjewel Teun! :-)
Ik ga er mee aan de slag.

Toevoeging op 23/11/2010 16:17:00:

werkt goed hoor :-)
 
P Widdershoven

P Widdershoven

23/11/2010 17:11:23
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$handle = fopen($jouwbestand, "r");

while (($data = fgetcsv($handle, 10000, ";")) !== FALSE) {

}


Heel simpel, maar het werkt :)
 
Ozzie PHP

Ozzie PHP

23/11/2010 17:55:31
Quote Anchor link
Thanks :-)
Wat is het verschil tussen beide methoden en welke is aan te raden?
 
P Widdershoven

P Widdershoven

23/11/2010 18:47:44
Quote Anchor link
Er zit een CSV functie in PHP dus waarom zou je die dan niet gebruiken? Je moet het je niet te moeilijk maken he !

$data[0] is de eerste kolom, $data[1] de tweede enzovoort

Succes ermee!
 
Ozzie PHP

Ozzie PHP

23/11/2010 20:41:50
Quote Anchor link
Dankjewel...

Ik heb nog een 3e manier uitgevonden:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$file = file(file.csv');
foreach ($file as &$line) {
    $line = explode(';', $line);
}

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
 
Ozzie PHP

Ozzie PHP

14/01/2011 13:54:58
Quote Anchor link
Wie kan me verder helpen... ik wil nu gegevens wegschrijven naar een Excel bestand. Ik heb een array $rows en in die array staan weer arrays (die een rij uit de database vertegenwoordigen). Alles lijkt te werken, hij vraagt of ik het bestand wil downloaden, en dan vervolgens blijft ie hangen. Ziet iemand wat er niet goed gaat?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$excel_data
= '';
foreach($rows as $row){
  $excel_data .= implode(",", $row)."\r\n";
}

$excel_file_name = 'test-'.time().'.csv';
header("Content-Type: application/force-download");
header("Content-Length: ".strlen($excel_data));
header("Content-Disposition: attachment; filename=$excel_file_name");
?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
header("Content-Type: application/force-download");
header("Content-Length: ".strlen($excel_data));
header("Content-Disposition: attachment; filename=$excel_file_name");
print $excel_data;
die();
?>
Gewijzigd op 14/01/2011 13:55:51 door Ozzie PHP
 
TJVB tvb

TJVB tvb

14/01/2011 14:38:44
Quote Anchor link
Excel of csv bestand?
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
 
Ozzie PHP

Ozzie PHP

14/01/2011 14:41:02
Quote Anchor link
Zie mjin toevoeging... het was al gelukt! TOch bedankt :)
(csv bestand trouwens)
 
TJVB tvb

TJVB tvb

14/01/2011 14:42:03
Quote Anchor link
Lol, ik vul mij bericht aan en tijdens het versturen mail binnenkomen dat er een nieuw bericht is
 
Ozzie PHP

Ozzie PHP

14/01/2011 14:58:59
Quote Anchor link
Ja, het kan soms snel gaan! ;)
 
Ozzie PHP

Ozzie PHP

17/01/2011 11:09:44
Quote Anchor link
Toch nog een vraag... het CSV bestand genereren gaat prima nu.

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... :(
 
John D

John D

17/01/2011 13:02:12
Quote Anchor link
Kolom type van excel veranderen van numeriek (cijfers) naar alphanumeriek (tekst).
 
Ozzie PHP

Ozzie PHP

17/01/2011 13:11:18
Quote Anchor link
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
 
Pim -

Pim -

17/01/2011 13:14:15
Quote Anchor link
Altijd fgetcsv() gebruiken!!!
De andere functies gooien bij een grote tabel in 1x je geheugen vol en daar wordt niemand gelukkig van...
 
Ozzie PHP

Ozzie PHP

17/01/2011 13:16:20
Quote Anchor link
Euhhh... waar heb jij het nu ineens over?
 
Donny Wie weet

Donny Wie weet

21/03/2013 20:34:46
Quote Anchor link
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.
 
Ozzie PHP

Ozzie PHP

21/03/2013 21:42:38
Quote Anchor link
Je zult het bestand altijd moeten uploaden, omdat de server erbij moet kunnen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.