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

PHP 使用 PHPExcel 讀寫 Excel 檔案完整範例教學

     編輯:PHP 相關知識

前言

在 PHP 開發中,匯出或修改 Excel 報表是常見需求。PHPExcel(現已併入 PhpSpreadsheet)是處理 Excel 檔案的經典函式庫。本文提供一個完整、可直接執行的範例,示範如何載入模板、修改儲存格內容,並以檔案下載方式輸出。

完整程式碼範例

<?php
// 模板檔案存放目錄
$dir = $_SERVER['DOCUMENT_ROOT'] . '/backoffice/admin/oemcheck/';

$templateName = '1.xlsx';      // 來源模板檔名
$outputFileName = '模板.xlsx';  // 下載時的檔名
$txt = 'test';                 // 要寫入的文字

// 1. 實例化讀取器,自動偵測 Excel 2007 (xlsx) 或 Excel 5 (xls)
$PHPReader = new PHPExcel_Reader_Excel2007();
if (!$PHPReader->canRead($dir . $templateName)) {
    $PHPReader = new PHPExcel_Reader_Excel5();
    if (!$PHPReader->canRead($dir . $templateName)) {
        die('無法識別的 Excel 文件!');
    }
}

// 2. 載入 Excel 檔案
$PHPExcel = $PHPReader->load($dir . $templateName);

// 3. 取得第一個工作表(索引 0)
$currentSheet = $PHPExcel->getSheet(0);

// 4. 寫入資料到 B13 儲存格(注意編碼轉換)
$currentSheet->setCellValue('B13', iconv('gbk', 'utf-8', $txt));

// 5. 實例化寫入器並輸出至瀏覽器下載
$PHPWriter = new PHPExcel_Writer_Excel2007($PHPExcel);

ob_start();
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="' . $outputFileName . '"');
header('Cache-Control: max-age=0');
$PHPWriter->save('php://output');
exit;

關鍵步驟解析

1. 多格式相容讀取

程式先嘗試用 Excel2007 讀取 .xlsx,失敗則改用 Excel5 讀取 .xls,確保舊版檔案也能處理。

2. 儲存格寫入與編碼

setCellValue('B13', ...) 指定座標寫入。範例中使用 iconv('gbk','utf-8',$txt) 處理編碼轉換,若您的專案已全面採用 UTF-8,可直接傳入字串。

3. 下載輸出 Header 設定

  • Content-Type:明確指定 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,比泛用的 octet-stream 更精確。
  • Content-Disposition: attachment:強制瀏覽器彈出下載視窗。
  • save('php://output'):直接輸出到標準輸出流,不佔用伺服器磁碟空間。

常見問題與改進建議

問題解決方案
記憶體不足大檔案建議改用 PhpSpreadsheet 的 ChunkReadFilter 分塊讀取,或增加 memory_limit。
中文檔名下載亂碼依 RFC 5987 格式寫 Header:
header('Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode($outputFileName));
樣式保留模板的字型、欄寬、合併儲存格等樣式會自動保留;若需動態調整樣式,可使用 $currentSheet->getStyle('B13')->applyFromArray([...])。

遷移提醒:PHPExcel 已停止維護

官方建議遷移至 PhpSpreadsheet,API 高度相容,只需將命名空間從 PHPExcel_* 改為 PhpOffice\PhpSpreadsheet\*,並透過 Composer 安裝:

composer require phpoffice/phpspreadsheet

結語

掌握「載入模板 → 修改資料 → 串流輸出」這三步驟,即可滿足大多數 Excel 匯出需求。建議新專案直接採用 PhpSpreadsheet,獲得更好的效能與長期支援。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved