PHPExcel 是 PHP 操作 Excel 文件的經典庫,雖然已停止維護(現建議使用 PhpSpreadsheet),但許多專案仍在使用。本文整理其核心功能,幫助開發者快速上手。
首先引入核心類別並實例化 PHPExcel 物件,設定文件元數據:
// 載入 PHPExcel 核心類別
require_once dirname(__FILE__) . '/PHPExcel.php';
// 建立新的 Excel 物件
$objPHPExcel = new PHPExcel();
// 設定文件屬性
$objPHPExcel->getProperties()
->setCreator("Sam.c")
->setLastModifiedBy("Sam.c Test")
->setTitle("Microsoft Office Excel Document")
->setSubject("Test")
->setDescription("Test")
->setKeywords("Test")
->setCategory("Test result file");
啟用第一個工作表並設定名稱、預設字體:
// 選擇第一個工作表(索引 0)
$objPHPExcel->setActiveSheetIndex(0);
// 設定工作表標題(注意編碼轉換)
$objPHPExcel->getActiveSheet()->setTitle(iconv('gbk', 'utf-8', 'phpexcel測試'));
// 設定預設字體與大小
$objPHPExcel->getDefaultStyle()->getFont()->setName(iconv('gbk', 'utf-8', '宋體'));
$objPHPExcel->getDefaultStyle()->getFont()->setSize(10);
根據需求輸出不同格式,關鍵在於設定正確的 HTTP 標頭與 Writer 類別:
if ($m_exportType == "excel") {
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
// 設定下載標頭
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=\"{$filename}\"");
header("Content-Transfer-Encoding: binary");
$objWriter->save("php://output");
}
if ($m_exportType == "pdf") {
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
$objWriter->setSheetIndex(0);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=\"{$m_strOutputPdfFileName}\"");
header("Content-Transfer-Encoding: binary");
$objWriter->save("php://output");
}
// 設定 A 欄寬度為 15
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);
// 設定第 6 列高度為 30
$objPHPExcel->getActiveSheet()->getRowDimension('6')->setRowHeight(30);
// 合併 A1 到 P1
$objPHPExcel->getActiveSheet()->mergeCells('A1:P1');
$styleArray = [
'font' => [
'bold' => true,
'size' => 12,
'color' => ['argb' => '00000000'],
],
'alignment' => [
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
],
];
$objPHPExcel->getActiveSheet()->getStyle('A1')->applyFromArray($styleArray);
// 單獨設定 B1 加粗
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setBold(true);
$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Hello Baby');
$objPHPExcel->getActiveSheet()->getStyle('A1')
->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('A1')
->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
// 設定 H5 字體為黑色
$objPHPExcel->getActiveSheet()->getStyle('H5')
->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLACK);
// 設定 H5 背景為淺粉色
$objPHPExcel->getActiveSheet()->getStyle('H5')
->getFill()->getStartColor()->setARGB('00ff99cc');
$objPHPExcel->getActiveSheet()->getStyle('F' . $iLineNumber)
->getNumberFormat()->setFormatCode('0.000');
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setName('Logo');
$objDrawing->setDescription('Logo');
$objDrawing->setPath('test.jpg');
$objDrawing->setWidth(400);
$objDrawing->setHeight(123);
$objDrawing->setCoordinates('J1');
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
$objPHPExcel->getActiveSheet()->setCellValue('H8', iconv('gbk', 'utf-8', '燕南天'));
$objPHPExcel->getActiveSheet()->getCell('H8')
->getHyperlink()->setUrl('https://www.jb51.net/');
$styleThinBorder = [
'borders' => [
'outline' => [
'style' => PHPExcel_Style_Border::BORDER_THIN,
'color' => ['argb' => 'FF000000'],
],
],
];
$objPHPExcel->getActiveSheet()->getStyle('A4:E10')->applyFromArray($styleThinBorder);
$objExcel->createSheet();
$objActSheet = $objExcel->getSheet($s);
$objActSheet->setTitle('表' . $GSheet);