【问题标题】:Export Mysql table data to Excel through PHP: Data not showing properly in Excel通过 PHP 将 Mysql 表数据导出到 Excel:数据在 Excel 中无法正确显示
【发布时间】:2015-08-05 17:56:00
【问题描述】:

我需要从 Mysql 表“tblinfoaanvraag”中导出数据(表的图片见这里:http://s29.postimg.org/qeqp43z4n/mysql.png

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

因此,此时我正在努力解决两件事:将 sql-results 格式化为 .csv 文件中的单元格,并且应正确显示标题/表字段名称,而不仅仅是“数组”。

这是下载的 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();
}
}

?>

【问题讨论】:

    标签: php excel csv


    【解决方案1】:

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

    您可以将文件句柄和每行的数据传递给它,并将其格式化为 CSV 行,并进行正确的转义。它使用文件,但您可以使用内存中的文件流来避免撞到磁盘

    $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 行,并将每行的数组值用于数据。

    【讨论】:

    • 谢谢,我试试看。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-20
      • 2011-01-12
      • 2011-12-04
      • 2013-09-09
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多