首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 匯出 MySQL 資料為 Excel 檔案實作範例

     編輯:PHP 相關知識

前言

利用 PHP 直接輸出 HTTP 標頭與 Tab 分隔文字,瀏覽器即會提示下載 .xls 檔案。這是一種無需第三方函式庫、相容性極佳的輕量匯出方案。

完整程式碼

<?php
// --- 資料庫連線設定 ---
$DB_Server = "localhost";
$DB_Username = "root";
$DB_Password = "123456";
$DB_DBName = "oa";
$DB_TBLName = "oa_form_table";

// --- 檔案命名 ---
$savename = date("YmdHis"); // 修正:原碼 "YmjHis" 格式錯誤
$file_type = "vnd.ms-excel";
$file_ending = "xls";

// --- 輸出 HTTP 標頭 ---
header("Content-Type: application/$file_type; charset=utf-8");
header("Content-Disposition: attachment; filename=$savename.$file_ending");
// header("Pragma: no-cache"); // 視需求啟用

// --- 連線資料庫 ---
$Connect = @mysqli_connect($DB_Server, $DB_Username, $DB_Password, $DB_DBName);
if (!$Connect) {
    die("Couldn't connect: " . mysqli_connect_error());
}
mysqli_set_charset($Connect, "utf8");

// --- 查詢資料 ---
$sql = "SELECT * FROM `$DB_TBLName`";
$result = mysqli_query($Connect, $sql);
if (!$result) {
    die("Query failed: " . mysqli_error($Connect));
}

// --- 輸出標題列 ---
$title = "資料庫:$DB_DBName, 資料表:$DB_TBLName, 匯出時間:" . date("Y-m-d H:i:s");
echo $title . "\n";

$sep = "\t";
$fieldCount = mysqli_num_fields($result);
for ($i = 0; $i < $fieldCount; $i++) {
    $meta = mysqli_fetch_field_direct($result, $i);
    echo $meta->name . $sep;
}
echo "\n";

// --- 輸出資料列 ---
while ($row = mysqli_fetch_row($result)) {
    $schema_insert = "";
    for ($j = 0; $j < $fieldCount; $j++) {
        if (!isset($row[$j])) {
            $schema_insert .= "NULL" . $sep;
        } elseif ($row[$j] !== "") {
            $schema_insert .= $row[$j] . $sep;
        } else {
            $schema_insert .= $sep;
        }
    }
    // 移除結尾多餘分隔符並換行
    $schema_insert = rtrim($schema_insert, $sep);
    echo $schema_insert . "\n";
}

mysqli_free_result($result);
mysqli_close($Connect);
?>

關鍵點說明

項目說明
標頭 Content-Typeapplication/vnd.ms-excel 讓瀏覽器識別為 Excel
Content-Dispositionattachment 強制下載,filename 指定檔名
字元編碼標頭與資料庫連線皆設 utf-8,避免中文亂碼
分隔符使用 \t (Tab),Excel 開啟時自動分欄
資料庫擴充範例已更新為 mysqli (原碼使用已棄用的 mysql_*)
欄位名稱使用 mysqli_fetch_field_direct 取得原始欄位名
NULL 處理資料庫 NULL 值輸出為字串 "NULL"

進階建議

  • 大量資料:建議分批查詢 (LIMIT) 配合 ob_flush()/flush() 逐段輸出,避免記憶體耗盡。
  • 真實 .xlsx:若需支援樣式、公式、多工作表,請改用 PhpSpreadsheet。
  • BOM:在標頭後輸出 echo "\xEF\xBB\xBF"; 可讓 Excel 直接以 UTF-8 開啟不需匯入嚮導。
  • 安全性:生產環境請移除硬編碼帳密,改用環境變數或設定檔。

常見問題

Excel 開啟中文亂碼?
確認資料庫、連線、HTTP 標頭、檔案內容皆為 UTF-8;或在輸出最前面加上 UTF-8 BOM。
數字開頭為 0 (如身分證) 被自動轉科學符號?
Tab 純文字無法指定儲存格格式,需改用 PhpSpreadsheet 設定儲存格為文字格式。
下載檔案為空?
檢查 header() 前是否有輸出 (含空白、BOM),確保 mysqli_query 成功。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved