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

PHPExcel 常用操作總結:從建立試算表到樣式設定完整指南

     編輯:PHP 綜合知識

前言

PHPExcel 是 PHP 操作 Excel 檔案最經典的函式庫(現已併入 PhpSpreadsheet),支援讀寫 .xls 與 .xlsx 格式。本文整理常見操作範例,涵蓋實例化、屬性設定、儲存格操作、樣式美化、圖片插入、工作表管理與輸出下載,供開發者快速查閱。

一、實例化 PHPExcel 物件

兩種常見建立方式:

<?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');

三、儲存格內容操作

1. 基本寫入(自動判斷型別)

$objActSheet->setCellValue('A1', '字串內容');
$objActSheet->setCellValue('A2', 26);           // 數值
$objActSheet->setCellValue('A3', true);         // 布林值
$objActSheet->setCellValue('A4', '=SUM(A2:A2)'); // 公式

2. 明確指定資料型別

// 強制將長數字當作字串,避免科學記號
$objActSheet->setCellValueExplicit(
    'A5',
    '847475847857487584',
    PHPExcel_Cell_DataType::TYPE_STRING
);

3. 合併與取消合併儲存格

$objActSheet->mergeCells('B1:C22');
$objActSheet->unmergeCells('B1:C22');

四、儲存格樣式設定

1. 欄寬與自動寬度

$objActSheet->getColumnDimension('B')->setAutoSize(true);
$objActSheet->getColumnDimension('A')->setWidth(30);

2. 數字格式(防止大數字科學記號)

$objStyleA5 = $objActSheet->getStyle('A5');
$objStyleA5->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
注意:使用 Excel5 寫入器時,FORMAT_NUMBER 可能需修改原始碼 PHPExcel_Writer_Excel5_Format::getXf() 才能正常顯示「0」格式。

3. 字體、對齊、邊框、填充

// 字體
$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);

六、工作表進階操作

1. 新增工作表

$objExcel->createSheet();
$objExcel->getSheet(1)->setTitle('測試2');

2. 保護工作表與鎖定儲存格

$objExcel->getSheet(1)->getProtection()->setSheet(true);
$objExcel->getSheet(1)->protectCells('A1:C22', 'PHPExcel'); // 密碼保護

七、輸出與下載

1. 儲存至檔案

$objWriter->save('output.xls');

2. 直接輸出至瀏覽器下載

$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 或分批寫入。
  • 中文亂碼:確保 PHP 檔案為 UTF-8 編碼,Excel5 輸出預設為 GBK,必要時用 iconv 轉換。
  • 效能優化:關閉不需的功能(如 $objExcel->setPreCalculateFormulas(false)),使用 setCellValueExplicit 減少型別推斷。
  • 遷移建議:PHPExcel 已停止維護,新專案請直接使用 PhpSpreadsheet,API 高度相容。

九、總結

PHPExcel 提供豐富的 API 操作 Excel,掌握核心物件(PHPExcel、Worksheet、Style、Writer)的關係與常用方法,即可滿足大多數報表匯出需求。建議開發者逐步遷移至 PhpSpreadsheet 以獲得持續更新與更佳效能。

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