Vraag & Antwoord

Webprogrammeren & scripting

MySql export naar Excel met php

10 antwoorden
  • Hallo Ik heb een MySql database, waarvan records naar Excel geexporteerd moeten worden. Ik vond een voorbeeld bij phpfreaks (http://www.phpfreaks.com/tutorials/114/0.php), maar wat er gebeurt is dat: - de html inhoud van de pagina in een excel bestand komt te staan - de veldnamen en de records worden correct uit de database gehaald, maar worden in 1 cel geplaatst, ondank het feit dat er in de php code tabs (\t) en end of line (\n) markeringen staan. De belangrijkste code is als volgt. Wie ziet waar de fout zit? Bij voorbaat dank. <?php ob_start(); // zonder dit kreeg ik problemen met headers die al geschreven waren define(db_host, "localhost"); define(db_user, "user"); define(db_pass, "ww"); define(db_link, mysql_connect(db_host,db_user,db_pass)); define(db_name, "database"); mysql_select_db(db_name); ?> ...html code <?php if (isset($_GET['login'])) { $select = "SELECT Username, Fullname, Email FROM Leden"; $export = mysql_query($select); $fields = mysql_num_fields($export); for ($i = 0; $i < $fields; $i++) { $header .= mysql_field_name($export, $i) . "\t"; } while($row = mysql_fetch_row($export)) { $line = ''; foreach($row as $value) { if ((!isset($value)) || ($value == "")) { $value = "\t"; } else { $value = str_replace('"', '""', $value); $value = '"' . $value . '"' . "\t"; } $line .= $value; } $data .= trim($line)."\n"; } $data = str_replace("\r","",$data); if ($data == "") { $data = "\n(0) Records gevonden!\n"; } header("Content-type: application/x-msdownload"); header("Content-Disposition: attachment; filename=extraction.xls"); header("Pragma: no-cache"); header("Expires: 0"); echo $header."\n".$data; } else {echo "U heeft geen gebruikers rechten voor deze pagina " ;} ?>
  • Probeer dit eens (heb er nog niet echt naar gekeken, komt van XpertXchange) [code:1:7c0dac9ac8] <?php // DB Connection here $select = "SELECT * FROM table_name"; $export = mysql_query ( $select ) or die ( "Sql error : " . mysql_error( ) ); $fields = mysql_num_fields ( $export ); for ( $i = 0; $i < $fields; $i++ ) { $header .= mysql_field_name( $export , $i ) . "\t"; } while( $row = mysql_fetch_row( $export ) ) { $line = ''; foreach( $row as $value ) { if ( ( !isset( $value ) ) || ( $value == "" ) ) { $value = "\t"; } else { $value = str_replace( '"' , '""' , $value ); $value = '"' . $value . '"' . "\t"; } $line .= $value; } $data .= trim( $line ) . "\n"; } $data = str_replace( "\r" , "" , $data ); if ( $data == "" ) { $data = "\n(0) Records Found!\n"; } header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=your_desired_name.xls"); header("Pragma: no-cache"); header("Expires: 0"); print "$header\n$data"; ?> [/code:1:7c0dac9ac8] of dit: *[url=http://fundisom.com/phparadise/php/databases/mySQL_to_excel]klik[/url]* Google doet wonderen :wink:
  • Heeft phpMyAdmin niet ook gewoon de mogelijkheid om te exporteren naar Excel?
  • Bedankt voor de suggesties. PhpMyAdmin blijkt inderdaad een export functie te hebben. Dit is echter voor iemand die alleen de website gebruikt wat omslachtig. De bedoeling is iemand zonder voorkennis een Excel werkblad kan maken. Het blijkt overigens vanuit Excel ook redelijk eenvoudig te doen als de MySql drivers geinstalleerd zijn, maar is iets meer werk voor de onervaren pc gebruiker. Het liefst doe ik de export vanuit de website, dus ik zal de andere suggestie eens proberen.
  • De code van carlobernardini is eigenlijk hetzelfde als wat ik al had. Er is een klein verschil in de header: header("Content-type: application/octet-stream"); in plaats van: header("Content-type: application/x-msdownload");, maar dat maakte geen verschil. Nog steeds wordt de hele database inhoud in 1 cel geplaatst. Iemand nog ideeen?
  • Standaard "ziet" Excel alleen ; (puntkomma's) als veldscheiding. Tabs maken dus volgens Excel deel uit van het veld. Als je je code dus wijzigt door "\t" te vervangen door ";", zou het moeten werken.
  • Bedankt hr Ed. Zoiets lijkt het inderdaad te zijn. Ik vond een werkende oplossing op: http://www.evolt.org/article/Using_MySQL_and_PHP_to_Present_Excel_Spreadsheets/20/26896/index.html Hierin worden de cellen als een tabel weggeschreven. (<td>$waarde</td>) Dit werkt perfekt. Bedankt voor het meedenken.
  • Weet je wat je eventueel ook heel sneaky kunt doen? Je kunt het gewoon exporteren als zijnde een html-tabel, dus met <table>, <tr>, <td> en zo, maar dan wel het bestand opslaan met de .xls extensie. Als je die dan opent met Excel, dan gaat dat prima, alleen is het geen echte Excel file. Wat je wel kunt doen, is het bestand in Excel gewoon weer opslaan als echte XLS, en dan is dat probleem ook weer opgelost. Niet echt netjes, dat geef ik toe... Maar het werkt wel. -EDIT- ojee, hetzelfde als hierboven staat dus :oops: :oops: :oops:
  • Bedankt Buur. In feite doe ik het ook zo. Als je het bestand niet opslaat maar opent is het inderdaad html.
  • Je zou ook een PERL-scriptje kunnen maken. Perl heeft een klasse die excel bestanden kan maken. Deze klasse heb ik al een paar keer met zeer veel tevredenheid gebruikt. http://search.cpan.org/~jmcnamara/Spreadsheet-WriteExcel-2.17/lib/Spreadsheet/WriteExcel.pm

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.