通过PHP将Mysql表格数据导出到Excel:数据在Excel中无法正确显示

我需要从Mysql表“tblinfoaanvraag”中导出数据(请参阅表格的图片: http ://s29.postimg.org/qeqp43z4n/mysql.png)

我有一个正确的查询工作代码,它触发一个Excel下载和数据在文件中。 但是,Excel文件中的数据仍被格式化为sql查询结果,并且标题(字段名称)仅显示为“Array”。

所以我现在有两件事情要做:将sql结果格式化为.csv文件中的单元格,而header / table字段名称应该正确显示,而不是“Array”。

下面是下载的Excel文件的截图: http : //s13.postimg.org/p0rcehehj/excel1.png

代码:

<?php if(isset($_POST['InfoaanvragenDownloaden'])) { try { // Variables for later use $header=""; $data=""; //connection $sHost = "localhost"; $sUser = "root"; $sPassword = ""; $sDatabase = "corbati"; $link = @mysqli_connect($sHost, $sUser, $sPassword, $sDatabase) or die("Oop, dbase is gone!"); //create query to select as data from your table $select = "select * from tblinfoaanvraag ORDER BY PK_Infoaanvraag DESC"; //run mysql query and then count number of fields $export = mysqli_query ( $link, $select ) or die ( "Sql error : " . mysql_error( ) ); $fields = mysqli_num_fields ( $export ); //create csv header row, to contain table headers //with database field names for ( $i = 0; $i < $fields; $i++ ) { $header .= mysqli_fetch_fields( $export ) . ","; } //this is where most of the work is done. //Loop through the query results, and create //a row for each while( $row = mysqli_fetch_row( $export ) ) { $line = ''; //for each field in the row foreach( $row as $value ) { //if null, create blank field if ( ( !isset( $value ) ) || ( $value == "" ) ){ $value = ","; } //else, assign field value to our data else { $value = str_replace( '"' , '""' , $value ); $value = '"' . $value . '"' . ","; } //add this field value to our row $line .= $value; } //trim whitespace from each row $data .= trim( $line ) . "\n"; } //remove all carriage returns from the data $data = str_replace( "\r" , "" , $data ); //create a file and send to browser for user to download header("Content-type: application/vnd.ms-excel"); header( "Content-disposition: filename=Infoaanvragen.csv"); print "$header\n$data"; exit; } catch (Exception $e) { $feedback = $e->getMessage(); } } ?> 

http://php.net/manual/en/function.fputcsv.php

您可以传递一个文件句柄和每行的数据,并将其格式化为CSV行,并带有正确的转义。 它使用一个文件,虽然你可以使用内存文件stream来避免碰到磁盘

 $filename = "php://memory"; $fp = fopen($filename, "w+b"); $rowNum = 1; while( $row = mysqli_fetch_row( $export ) ) { if ($rowNum == 1){ fputcsv($fp, array_keys($row)); // Headers } fputcsv($fp, $row) // Data $rowNum++; } rewind($fp); var_dump(stream_get_contents($fp)); 

您可以使用行的数组键作为第一个CSV行,并将每行的数组值作为数据。

使用';' 作为分隔符( fputcsv有一个参数,默认是',' ),并以DOS格式设置行尾。 至less这是phpMyAdmin在“MS Excel格式的CSV”格式导出时的function。