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

PHP 生成 Excel 檔案並儲存至指定目錄:基於 ExcelXml 類庫的 exportExcel 封裝函數

     編輯:PHP 綜合知識

核心函數:exportExcel

function exportExcel($data = '', $title = '', $filename = 'excel', $field = array()) {
    if (!$data || !is_array($data)) return false;
    if ($filename == '') $filename = 'excel';

    // 可選:只匯出指定欄位且按順序
    if ($field && is_array($field)) {
        $newData = [];
        foreach ($data as $k => $v) {
            foreach ($field as $fkey) {
                $newData[$k][$fkey] = $v[$fkey];
            }
        }
        $data = $newData;
    }

    // 載入 ExcelXml 類庫(需自行下載)
    import("@.ORG.Util.ExcelXml");
    $xls = new ExcelXml('UTF-8', false, 'Sheet1');
    $xls->addArray($data, $title);
    $xls->generateXML($filename); // 直接輸出下載或儲存
}

輔助函數:import 類庫載入器

function import($class, $baseUrl = '', $ext = '.class.php') {
    static $_file = [];
    $class = str_replace(['.', '#'], ['/', '.'], $class);
    if ('' === $baseUrl && false === strpos($class, '/')) {
        return alias_import($class); // 別名導入
    }
    if (isset($_file[$class . $baseUrl])) return true;
    $_file[$class . $baseUrl] = true;

    $parts = explode('/', $class);
    if (empty($baseUrl)) {
        if ('@' == $parts[0] || APP_NAME == $parts[0]) {
            $baseUrl = dirname(LIB_PATH);
            $class = substr_replace($class, basename(LIB_PATH) . '/', 0, strlen($parts[0]) + 1);
        } elseif ('think' == strtolower($parts[0])) {
            $baseUrl = CORE_PATH;
            $class = substr($class, 6);
        } elseif (in_array(strtolower($parts[0]), ['org', 'com'])) {
            $baseUrl = LIBRARY_PATH;
        } else {
            $class = substr_replace($class, '', 0, strlen($parts[0]) + 1);
            $baseUrl = APP_PATH . '../' . $parts[0] . '/' . basename(LIB_PATH) . '/';
        }
    }
    if (substr($baseUrl, -1) != '/') $baseUrl .= '/';
    $classfile = $baseUrl . $class . $ext;
    if (!class_exists(basename($class), false)) {
        return require_cache($classfile);
    }
}

使用範例

$data = [
    ['id'=>1, 'name'=>'張三', 'email'=>'zhang@example.com'],
    ['id'=>2, 'name'=>'李四', 'email'=>'li@example.com'],
];
$title = ['ID', '姓名', 'Email'];
$field = ['id', 'name', 'email']; // 只匯出這三欄,按此順序

exportExcel($data, $title, 'user_list', $field);

ExcelXml 類庫說明

  • 生成 Excel 2003 XML 格式(.xls),相容性極佳
  • 支援 UTF-8、多工作表、樣式設定
  • 需下載 ExcelXml.class.php 放入 ORG/Util/ 目錄
  • 官方下載:PHPClasses ExcelXml

儲存至指定目錄(而非下載)

generateXML() 預設輸出下載。若需儲存檔案,修改類庫或使用 PHPExcel:

require 'PHPExcel.php';
$objPHPExcel = new PHPExcel();
$objPHPExcel->getActiveSheet()->fromArray($data, null, 'A1');
// 寫入標題
foreach ($title as $i => $t) $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($i, 1, $t);
$writer = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$writer->save('/path/to/save/user_list.xlsx');
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved