目錄
Toggle什麼是PHPExcel?
PHPExcel簡介與核心功能
PHPExcel是一套專為PHP開發者設計的開源函式庫,能夠在不依賴Excel軟體的情況下,讀取與產生Excel檔案(支援.xls與.xlsx格式)。這讓網站、系統或自動化腳本能夠動態產生報表、批次處理資料、或將資料匯入匯出Excel,廣泛應用於專案管理、財務分析、業務數據處理等場景。
維護現況與官方替代方案
需特別注意,PHPExcel已於數年前停止維護,官方團隊已將專案封存,並推薦新專案改用[PhpSpreadsheet]。PhpSpreadsheet繼承了PHPExcel的設計理念,並針對現代PHP版本、效能與安全性做出多項優化,支援更多Excel功能與格式。
適用情境與選用建議
- 適合繼續使用PHPExcel:
- 現有專案已大量採用且維護成本可控。
- 專案PHP版本較舊,暫無法升級至PhpSpreadsheet需求的版本。
- 建議改用PhpSpreadsheet:
- 新專案開發,或考慮長期維護與安全性。
- 需支援最新Excel格式、功能或大型檔案處理。
- 注意事項:
- PHPExcel不再修正安全漏洞,建議逐步規劃遷移。
安裝與環境建置
安裝前注意事項
- PHP版本相容性:
- PHPExcel僅支援舊版PHP(建議PHP 5.2~7.2),新版PHP可能出現相容性問題。
- PhpSpreadsheet則支援較新PHP版本。
- 伺服器權限:
- 需具備檔案讀寫權限,否則Excel檔案無法正確產生或儲存。
- 依賴套件:
- 建議確認伺服器已安裝zip、xml等相關PHP擴充套件。
使用Composer安裝
Composer是主流的PHP套件管理工具。安裝方式如下:
composer require phpoffice/phpexcel
若Composer回報找不到套件,代表官方已下架,建議改用PhpSpreadsheet。
手動安裝方式
- 前往GitHub存檔頁面下載PHPExcel原始碼。
- 解壓縮後,將整個PHPExcel資料夾放入專案目錄。
- 在PHP程式中引入主檔案:
php
require_once 'PHPExcel/Classes/PHPExcel.php'; - 若遇到「找不到類別」或「autoload失敗」等錯誤,請確認路徑正確。
常見安裝問題
- PHP版本不符:
- 若出現語法錯誤,請檢查PHP版本,或考慮升級至PhpSpreadsheet。
- 權限不足:
- 無法寫入檔案時,請檢查目錄權限設定。
PHPExcel基本操作教學
創建Excel檔案
以下範例展示如何用PHPExcel建立一個簡單的Excel檔案,並寫入資料:
require_once 'PHPExcel/Classes/PHPExcel.php';
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', '姓名')
->setCellValue('B1', '分數')
->setCellValue('A2', '王小明')
->setCellValue('B2', 95);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('report.xlsx');
說明:
– setActiveSheetIndex(0):選擇第一個工作表。
– setCellValue():設定指定儲存格的內容。
– PHPExcel_IOFactory::createWriter():選擇輸出格式(Excel2007為.xlsx)。
讀取Excel檔案
以下範例說明如何讀取現有Excel檔案並輸出內容:
require_once 'PHPExcel/Classes/PHPExcel.php';
$objPHPExcel = PHPExcel_IOFactory::load('report.xlsx');
$sheet = $objPHPExcel->getActiveSheet();
foreach ($sheet->getRowIterator() as $row) {
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false);
foreach ($cellIterator as $cell) {
echo $cell->getValue() . "\t";
}
echo "\n";
}
常見錯誤:
– 檔案不存在或路徑錯誤,會出現「找不到檔案」訊息。
– 若Excel檔案有密碼保護,PHPExcel無法直接讀取。
儲存與匯出
- 支援輸出為.xls(Excel5)與.xlsx(Excel2007)格式。
- 若需直接下載,需設定HTTP標頭:
php
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="report.xlsx"');
header('Cache-Control: max-age=0');
$objWriter->save('php://output');
進階應用技巧
設置單元格樣式
可自訂字體、顏色、對齊方式等。範例:
$sheet = $objPHPExcel->getActiveSheet();
$sheet->getStyle('A1')->getFont()->setBold(true);
$sheet->getStyle('A1')->getFont()->setSize(14);
$sheet->getStyle('A1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
->getStartColor()->setARGB('FFFF00');
應用情境:
– 報表標題加粗、重點欄位標示顏色,提升可讀性。
合併單元格
合併多個儲存格常用於標題或分組:
$sheet->mergeCells('A1:C1');
注意:
– 合併後僅左上角儲存格內容會顯示,其他將被覆蓋。
批次處理與大檔案操作
- 批次匯出:
- 可用迴圈將資料庫資料逐列寫入Excel。
- 大檔案效能:
- PHPExcel記憶體消耗高,處理數萬筆資料時易出現「記憶體不足」錯誤。
- 建議分批寫入,或考慮PhpSpreadsheet的「逐行寫入」功能。
範本應用與匯入匯出
- 可先設計Excel範本,程式讀取範本後填入資料,保留格式與公式。
- 實務上常用於發票、成績單、專案進度表等自動化產生。
常見問題與錯誤排解
常見錯誤訊息與解決方式
- 找不到PHPExcel類別:
- 檢查檔案路徑與autoload設定。
- 記憶體不足(Allowed memory size exhausted):
- 增加PHP記憶體限制,或減少一次處理資料量。
- 格式不支援:
- PHPExcel僅支援.xls與.xlsx,無法處理.csv、ods等格式。
效能與安全性建議
- 避免一次載入大型Excel檔案,建議分批處理。
- 不建議於公開API直接暴露Excel匯入功能,避免惡意檔案攻擊。
- 定期更新至安全的函式庫版本,或規劃遷移至PhpSpreadsheet。
FAQ
- PHPExcel能否處理含巨集的Excel檔?
- 不能執行或產生VBA巨集,但可保留巨集內容於檔案中。
- 如何處理多工作表?
- 可用
createSheet()新增,或用getSheet()切換。 - 與Google Sheets API有何不同?
- PHPExcel處理本地Excel檔案,Google Sheets API則針對雲端試算表,適用於即時協作與自動化。
替代方案與工具比較
PhpSpreadsheet簡介與遷移建議
PhpSpreadsheet為PHPExcel的官方繼任者,支援新PHP版本、更多Excel功能與格式,且持續維護。遷移建議:
- 新專案請直接採用PhpSpreadsheet。
- 舊專案可逐步替換,兩者API設計相似,學習曲線平緩。
與Google Sheets API、Excel VBA等工具簡述比較
| 工具 | 適用情境 | 優點 | 限制 |
|---|---|---|---|
| PHPExcel | 本地Excel檔案產生/讀取 | 易於PHP整合,免安裝Excel | 停止維護,效能有限 |
| PhpSpreadsheet | 現代PHP專案、需支援新格式 | 持續更新,效能較佳 | 需較新PHP版本 |
| Google Sheets API | 雲端協作、跨平台自動化 | 即時協作、雲端存取 | 需Google帳號、API學習曲線 |
| Excel VBA | 桌面自動化、複雜巨集處理 | 強大自動化、原生支援 | 需用戶端安裝Excel |
適用情境說明
- 大量資料、效能需求高: 建議選用PhpSpreadsheet或Google Sheets API。
- 需與團隊協作、雲端存取: Google Sheets API較佳。
- 桌面自動化、複雜巨集: Excel VBA適合。
結語與推薦資源
何時考慮遷移、持續維護建議
若現有專案依賴PHPExcel,建議定期評估安全性與維護成本,逐步規劃遷移至PhpSpreadsheet或其他現代工具,以確保長期穩定運作。
推薦工具資源
在專案管理與團隊協作場景中,若需整合Excel自動化與任務追蹤,可考慮[Monday.com]、[ClickUp]等平台,這些工具支援多種資料匯入匯出,並能與Excel、Google Sheets等辦公軟體無縫整合,有效提升團隊效率與資料管理能力。