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

PHP 將資料庫查詢結果匯出為 Excel 檔案

     編輯:PHP 相關知識

原理:HTML 表格偽裝 Excel

瀏覽器/Excel 支援直接開啟 <table> 結構的 .xls 檔案。利用輸出緩衝捕獲 HTML,再寫入檔案,無需第三方庫 (如 PHPExcel/PhpSpreadsheet) 即可快速實作簡單匯出。

Excel 匯出類別

<?php
class ExcelExporter {
    public function start() {
        ob_start(); // 開啟輸出緩衝
    }

    public function save($path) {
        $data = ob_get_contents();
        ob_end_clean();
        $this->writeFile($path, $data);
    }

    private function writeFile($path, $data) {
        $dir = dirname($path);
        if (!is_dir($dir)) mkdir($dir, 0755, true);
        $fp = fopen($path, 'wb');
        fwrite($fp, $data);
        fclose($fp);
    }
}
?>

完整使用範例

<?php
require 'ExcelExporter.php';
require 'db_config.php'; // 包含 $pdo

$excel = new ExcelExporter();
$excel->start();
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<table border="1">
    <thead>
        <tr>
            <th>公司中文名</th>
            <th>公司英文名</th>
            <th>聯絡人</th>
            <th>職位</th>
            <th>電話</th>
            <th>傳真</th>
            <th>Email</th>
            <th>網站</th>
            <th>產品</th>
        </tr>
    </thead>
    <tbody>
<?php
$stmt = $pdo->query("SELECT * FROM map ORDER BY register_date DESC");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo "<tr>";
    foreach (['companyname_cn','companyname_en','name','position','tel','fax','email','website','product'] as $col) {
        echo "<td>" . htmlspecialchars($row[$col] ?? '') . "</td>";
    }
    echo "</tr>";
}
?>
    </tbody>
</table>
<?php
$excel->save("Excel/data_" . date('Ymd') . ".xls");
echo "匯出完成:Excel/data_" . date('Ymd') . ".xls";
?>

關鍵步驟解析

  1. $excel->start():啟用 ob_start() 捕獲後續所有輸出 (HTML)。
  2. 輸出標準 HTML 表格,含 <meta charset=utf-8> 確保中文不亂碼。
  3. 資料輸出時使用 htmlspecialchars() 防止 HTML 注入破壞結構。
  4. $excel->save():取得緩衝內容,寫入 .xls 檔案。

優缺點評估

優點缺點
零依賴、程式碼極簡僅支援基本表格,無法設定欄寬、樣式、公式
記憶體效率高 (緩衝流式)大數據量 (超過 5 萬列) 易導致 Excel 開啟緩慢或記憶體不足
相容性好 (Excel、LibreOffice、Google Sheets 皆可開)無法處理合併儲存格、多工作表、圖表等進階功能

進階替代方案

  • PhpSpreadsheet:PHPExcel 繼任者,功能完整,支援 .xlsx/.ods/.csv,記憶體較大。
  • Box/Spout:串流式讀寫,記憶體固定極低,適合百萬列大數據匯出。
  • CSV 直接輸出:最輕量,fputcsv() 逐行寫入,無格式但通用性最高。
  • 資料庫原生匯出:SELECT ... INTO OUTFILE (MySQL) 或 COPY TO (PostgreSQL) 效能最佳。

HTTP 下載直接輸出 (不存檔)

<?php
$filename = 'export_' . date('Ymd_His') . '.xls';
header('Content-Type: application/vnd.ms-excel; charset=utf-8');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Pragma: no-cache');
header('Expires: 0');

$excel->start();
?>
<meta charset="utf-8">
<table>...</table>
<?php
$excel->save('php://output'); // 直接輸出到瀏覽器
?>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved