PHPExcel 是 PHP 操作 Excel 檔案最經典的函式庫(現已併入 PhpSpreadsheet),支援讀寫 .xls 與 .xlsx 格式。本文整理常見操作範例,涵蓋實例化、屬性設定、儲存格操作、樣式美化、圖片插入、工作表管理與輸出下載,供開發者快速查閱。
兩種常見建立方式:
<?php
// 1. 建立空白試算表
$phpexcel = new PHPExcel();
// 2. 從現有模板載入(Excel5 為 .xls 格式)
$phpexcel = PHPExcel_IOFactory::createReader('Excel5')->load('template.xls');
<?php
// 設定 include path(視專案結構調整)
set_include_path('.' . PATH_SEPARATOR . 'D:\Zeal\PHP_LIBS' . PATH_SEPARATOR . get_include_path());
require_once 'PHPExcel.php';
// 建立核心物件
$objExcel = new PHPExcel();
// 選擇寫入器:Excel5 (.xls) 或 Excel2007 (.xlsx)
// $objWriter = new PHPExcel_Writer_Excel5($objExcel);
// $objWriter = new PHPExcel_Writer_Excel2007($objExcel);
// 設定文件屬性
$objProps = $objExcel->getProperties();
$objProps->setCreator('Zeal Li');
$objProps->setLastModifiedBy('Zeal Li');
$objProps->setTitle('Office XLS Test Document');
$objProps->setSubject('Office XLS Test Document, Demo');
$objProps->setDescription('Test document, generated by PHPExcel.');
$objProps->setKeywords('office excel PHPExcel');
$objProps->setCategory('Test');
// 設定活動工作表索引(預設為 0)
$objExcel->setActiveSheetIndex(0);
$objActSheet = $objExcel->getActiveSheet();
$objActSheet->setTitle('測試Sheet');
$objActSheet->setCellValue('A1', '字串內容');
$objActSheet->setCellValue('A2', 26); // 數值
$objActSheet->setCellValue('A3', true); // 布林值
$objActSheet->setCellValue('A4', '=SUM(A2:A2)'); // 公式
// 強制將長數字當作字串,避免科學記號
$objActSheet->setCellValueExplicit(
'A5',
'847475847857487584',
PHPExcel_Cell_DataType::TYPE_STRING
);
$objActSheet->mergeCells('B1:C22');
$objActSheet->unmergeCells('B1:C22');
$objActSheet->getColumnDimension('B')->setAutoSize(true);
$objActSheet->getColumnDimension('A')->setWidth(30);
$objStyleA5 = $objActSheet->getStyle('A5');
$objStyleA5->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
注意:使用 Excel5 寫入器時,FORMAT_NUMBER可能需修改原始碼PHPExcel_Writer_Excel5_Format::getXf()才能正常顯示「0」格式。
// 字體
$objFontA5 = $objStyleA5->getFont();
$objFontA5->setName('Courier New');
$objFontA5->setSize(10);
$objFontA5->setBold(true);
$objFontA5->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
$objFontA5->getColor()->setARGB('FF999999');
// 對齊
$objAlignA5 = $objStyleA5->getAlignment();
$objAlignA5->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$objAlignA5->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
// 邊框
$objBorderA5 = $objStyleA5->getBorders();
$objBorderA5->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objBorderA5->getTop()->getColor()->setARGB('FFFF0000');
$objBorderA5->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objBorderA5->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objBorderA5->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
// 填充顏色
$objFillA5 = $objStyleA5->getFill();
$objFillA5->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
$objFillA5->getStartColor()->setARGB('FFEEEEEE');
// 複製樣式到區域
$objActSheet->duplicateStyle($objStyleA5, 'B1:C22');
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setName('ZealImg');
$objDrawing->setDescription('Image inserted by Zeal');
$objDrawing->setPath('./zeali.net.logo.gif');
$objDrawing->setHeight(36);
$objDrawing->setCoordinates('C23');
$objDrawing->setOffsetX(10);
$objDrawing->setRotation(15);
$objDrawing->getShadow()->setVisible(true);
$objDrawing->getShadow()->setDirection(36);
$objDrawing->setWorksheet($objActSheet);
$objExcel->createSheet();
$objExcel->getSheet(1)->setTitle('測試2');
$objExcel->getSheet(1)->getProtection()->setSheet(true);
$objExcel->getSheet(1)->protectCells('A1:C22', 'PHPExcel'); // 密碼保護
$objWriter->save('output.xls');
$outputFileName = 'output.xls';
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $outputFileName . '"');
header('Cache-Control: max-age=0');
$objWriter->save('php://output');
cell caching 或分批寫入。iconv 轉換。$objExcel->setPreCalculateFormulas(false)),使用 setCellValueExplicit 減少型別推斷。PHPExcel 提供豐富的 API 操作 Excel,掌握核心物件(PHPExcel、Worksheet、Style、Writer)的關係與常用方法,即可滿足大多數報表匯出需求。建議開發者逐步遷移至 PhpSpreadsheet 以獲得持續更新與更佳效能。