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); // 直接輸出下載或儲存
}
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.class.php 放入 ORG/Util/ 目錄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');