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

PHP 導出 Excel 實戰範例:使用 PHPExcel 產出格式化報表

     編輯:PHP 相關知識

PHP 導出 Excel 實戰範例:使用 PHPExcel 產出格式化報表

PHPExcel 是經典的 Excel 產生庫(現已併入 PhpSpreadsheet),本文提供完整的導出範例,含標題樣式、欄寬設定、換行、儲存與下載。

前置準備

  1. 下載 PHPExcel,將 Classes 目錄放入專案根目錄。
  2. 引入核心類別:require_once 'Classes/PHPExcel.php';

完整導出程式碼

<?php
require_once dirname(__FILE__) . '/Classes/PHPExcel.php';

// 假設 $a 為從資料庫取得的資料陣列
$a = [ /* ... */ ];

// 欄位字母對照(支援超過 26 欄)
$numArr = range('A', 'Z');
foreach (range('A', 'Z') as $c1) {
    foreach (range('A', 'Z') as $c2) {
        $numArr[] = $c1 . $c2;
    }
}

$objPHPExcel = new PHPExcel();

// 標題列
$arr = ['訂單號','下單時間','城市','地區','客戶名稱','收貨人','聯系電話','收貨地址',
        'ERP客戶名稱','物流系統客戶名稱','活動項目','品牌','型號','顏色','物流系統型號',
        '訂貨量','單價','代收貨款','紅包','價保返利','運費','實收金額','付款方式',
        '訂單來源','上游廠商','是否在倉','快遞面單號','訂單狀態','確認時間',
        '末次狀態確認時間','描述','對應業務','對應客服','商家留言','下單摘要','業務員','聯系方式'];

// 設定換行
$objPHPExcel->getActiveSheet()->getStyle('H')->getAlignment()->setWrapText(true);
$objPHPExcel->getActiveSheet()->getStyle('Y')->getAlignment()->setWrapText(true);

// 設定欄寬
$widths = ['A'=>15, 'B'=>20, 'G'=>15, 'H'=>40, 'I'=>15, 'J'=>15];
foreach ($widths as $col => $w) {
    $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension($col)->setWidth($w);
}

// 寫入標題
foreach ($arr as $i => $title) {
    $objPHPExcel->setActiveSheetIndex(0)->setCellValue($numArr[$i].'1', $title);
}

// 寫入資料
foreach ($a as $i => $row) {
    $r = $i + 2;
    $objPHPExcel->setActiveSheetIndex(0)
        ->setCellValue($numArr[0].$r, $row['order_sn'])
        ->setCellValue($numArr[1].$r, $row['add_time'])
        ->setCellValue($numArr[2].$r, $row['city'])
        ->setCellValue($numArr[3].$r, $row['region_name'])
        ->setCellValue($numArr[4].$r, $row['company'])
        ->setCellValue($numArr[5].$r, $row['consignee'])
        ->setCellValue($numArr[6].$r, $row['mobile'])
        ->setCellValue($numArr[7].$r, $row['address'])
        ->setCellValue($numArr[8].$r, '')
        ->setCellValue($numArr[9].$r, '')
        ->setCellValue($numArr[10].$r, '')
        ->setCellValue($numArr[11].$r, $row['brand_name']);
}

// 設定工作表標題
$dirName = date('Ymd');
$fileName = date('YmdHis');
$objPHPExcel->getActiveSheet()->setTitle($fileName);
$objPHPExcel->setActiveSheetIndex(0);

// 儲存檔案
$savePath = '../excel/' . $dirName . '/' . $fileName . '.xlsx';
if (!is_dir(dirname($savePath))) mkdir(dirname($savePath), 0755, true);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save($savePath);

// 導向下載
header('Location: https://' . $_SERVER['HTTP_HOST'] . '/excel/' . $dirName . '/' . $fileName . '.xlsx');
?>

簡易導出法(直接輸出到瀏覽器)

header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: filename=export.xls");
// 直接 echo HTML 表格或 CSV 內容
echo "<table><tr><th>姓名</th><th>年齡</th></tr>...";

注意事項

  • 大量資料導出易記憶體不足,建議分批寫入或使用 PhpSpreadsheet 的 createWriter('Xlsx') 搭配 setPreCalculateFormulas(false)。
  • PHPExcel 已停止維護,新專案建議直接使用 PhpSpreadsheet。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved