【问题标题】:How do I export MySQL table to Excel with PHP?如何使用 PHP 将 MySQL 表导出到 Excel?
【发布时间】:2015-06-18 03:49:07
【问题描述】:

我目前正在为我的学校开发一个应用程序来记录每个班级的班级清洁度结果,所以我需要使用 PHP 将 MySQL 表中整理的结果转换为 Microsoft Excel,最好也可以通过 Android OS 手机打开。

我使用了以下 PHP 代码:

<?PHP

$mysqli_user = "(user)";
$mysqli_password = "(password)";
$mysqli_host = "(host)";
$mysqli_database = "(database)";


  $filename = "grading_results_" . time() . ".xls";

  header("Content-Disposition: attachment; filename=\"$filename\"");
  header("Content-Type: application/vnd.ms-excel");

$link = mysqli_connect($mysqli_host,$mysqli_user,$mysqli_password,$mysqli_database);
$query = 'SELECT * FROM (table_name)';

$result = mysqli_query($link, $query);

while ($row = mysqli_fetch_row($result)){
 print implode("\t", $row) . "\n";
}
mysqli_close($link);
?>

这就是我的表格在 phpMyAdmin 中的样子:

https://www.dropbox.com/s/7pr3gh06zta5d8u/Snip20150618_2.png?dl=0

这是我使用这段代码转换后的 Excel 文件的样子。

https://www.dropbox.com/s/571m9lfj64tklpc/Snip20150618_3.png?dl=0

为什么没有列和行?我需要 Excel 文件的格式和样式与 phpMyAdmin 中的表格完全相同。任何人都可以帮助编辑我的代码而不是提供一个全新的代码吗?

提前感谢您的回答!

【问题讨论】:

    标签: php mysql excel


    【解决方案1】:

    手动

    1. 运行 tour localhost 并登录到 phpMyAdmin
    2. 单击您的数据库,然后单击您要获取的表 Excel。

    那么

    1. 然后按 GO 按钮

    有代码

    define ("DB_HOST", "localhost");
    define ("DB_USER", "root");
    define ("DB_PASS","");
    define ("DB_NAME","DATABASE_NAME");
    
    $link = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Couldn't make connection.");
    $db = mysql_select_db(DB_NAME, $link) or die("Couldn't select database");
    

    然后

    $setCounter = 0;
    
    $setExcelName = "download_excal_file";
    
    $setSql = "YOUR SQL QUERY GOES HERE";
    
    $setRec = mysql_query($setSql);
    
    $setCounter = mysql_num_fields($setRec);
    
    for ($i = 0; $i < $setCounter; $i++) {
        $setMainHeader .= mysql_field_name($setRec, $i)."\t";
    }
    
    while($rec = mysql_fetch_row($setRec))  {
      $rowLine = '';
      foreach($rec as $value)       {
        if(!isset($value) || $value == "")  {
          $value = "\t";
        }   else  {
    //It escape all the special charactor, quotes from the data.
          $value = strip_tags(str_replace('"', '""', $value));
          $value = '"' . $value . '"' . "\t";
        }
        $rowLine .= $value;
      }
      $setData .= trim($rowLine)."\n";
    }
      $setData = str_replace("\r", "", $setData);
    
    if ($setData == "") {
      $setData = "no matching records found";
    }
    
    $setCounter = mysql_num_fields($setRec);
    
    
    
    //This Header is used to make data download instead of display the data
     header("Content-type: application/octet-stream");
    
    header("Content-Disposition: attachment; filename=".$setExcelName."_Report.xls");
    header("Pragma: no-cache");
    header("Expires: 0");
    
    //It will print all the Table row as Excel file row with selected column name as header.
    echo ucwords($setMainHeader)."\n".$setData."\n";
    

    More About Code

    【讨论】:

    【解决方案2】:
    SELECT id, name, email INTO OUTFILE '/tmp/ram.csv'
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
    ESCAPED BY ‘\\’
    LINES TERMINATED BY '\n'
    FROM users WHERE id=1
    

    这里/tmp/是你要存储csv的地址

    【讨论】:

    • 谢谢,但我需要一个 Excel 文件 (.xls)
    【解决方案3】:
      <?php
        header( "Content-Type: application/vnd.ms-excel" );
        header( "Content-disposition: attachment; filename=spreadsheet.xls" );
    
        // print your data here. note the following:
        // - cells/columns are separated by tabs ("\t")
        // - rows are separated by newlines ("\n")
    
        // for example:
        echo 'First Name' . "\t" . 'Last Name' . "\t" . 'Phone' . "\n";
        echo 'John' . "\t" . 'Doe' . "\t" . '555-5555' . "\n";
    ?>
    

    // 可以从数据库中取出数据并显示在表格中。然后将表格放入 echo 以获取 Excel 文件。

    【讨论】:

    • 返回的不是excel文件,而是内容类型错误的CSV文件
    猜你喜欢
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    相关资源
    最近更新 更多