# PEAR 安裝
pear install Spreadsheet_Excel_Writer-0.9.4
# Composer (非官方分支,含 PHP 7/8 相容修正)
composer require pear/spreadsheet_excel_writer
<?php
require_once 'Spreadsheet/Excel/Writer.php';
// 1. 建立工作簿並直接輸出到瀏覽器
$workbook = new Spreadsheet_Excel_Writer();
$workbook->send('sales_report.xls'); // 必須在任何輸出前呼叫
// 2. 新增工作表
$sheet = $workbook->addWorksheet('銷售明細');
// 3. 定義格式
$headerFmt = $workbook->addFormat([
'Bold' => 1,
'Size' => 12,
'Color' => 'white',
'FgColor'=> 'navy',
'Align' => 'center',
'Border' => 1,
]);
$numberFmt = $workbook->addFormat(['NumFormat' => '#,##0.00', 'Align' => 'right']);
$dateFmt = $workbook->addFormat(['NumFormat' => 'YYYY-MM-DD', 'Align' => 'center']);
// 4. 寫入標題列
$headers = ['日期', '商品', '數量', '單價', '金額'];
foreach ($headers as $col => $title) {
$sheet->write(0, $col, $title, $headerFmt);
}
// 5. 模擬資料寫入
$data = [
['2024-01-15', '筆記型電腦', 5, 25000, 125000],
['2024-01-16', '滑鼠', 20, 350, 7000],
['2024-01-17', '螢幕', 3, 8500, 25500],
];
foreach ($data as $rowIdx => $row) {
$r = $rowIdx + 1;
$sheet->write($r, 0, $row[0], $dateFmt);
$sheet->write($r, 1, $row[1]);
$sheet->write($r, 2, $row[2]);
$sheet->write($r, 3, $row[3], $numberFmt);
$sheet->writeFormula($r, 4, "=C{$r}*D{$r}", $numberFmt); // 公式
}
// 6. 設定欄寬
$sheet->setColumn(0, 0, 12);
$sheet->setColumn(1, 1, 20);
$sheet->setColumn(2, 4, 14);
// 7. 關閉並輸出
$workbook->close();
?>
| 需求 | 實現方式 |
|---|---|
| 合併儲存格 | $sheet->mergeCells('A1:E1'); // 標題跨欄 |
| 凍結窗格 | $sheet->freezePanes([1, 0]); // 凍結首列 |
| 自動過濾 | $sheet->autofilter(0, 0, count($data), 4); |
| 資料驗證 (下拉) | $sheet->dataValidationList(1, 1, count($data), 1, ['筆電','滑鼠','螢幕']); |
| 插入圖片 | $sheet->insertBitmap(0, 5, 'logo.bmp'); // 僅支援 BMP |
| 頁首/頁尾 | $sheet->setHeader('&L報表&R第 &P 頁'); $sheet->setFooter('&C機密'); |
| 隱藏網格線 | $sheet->hideGridLines(); |
iconv('UTF-8', 'CP936', $str) (繁體用 CP950)。composer require pear/spreadsheet_excel_writer 社群維護分支。PhpSpreadsheet API 相似,遷移成本低,長期維護更安心。