A、1=>B、26=>AA...以此類推) function num2alpha($n) { for ($r = ""; $n >= 0; $n = intval($n / 26) - 1) $r = chr($n % 26 + 0x41) . $r; return $r; } //英文轉數字(A=>0、B=>1、AA=>26...以此類推) function alpha2num($a) { $l = strlen($a); $n = 0; for ($i = 0; $i < $l; $i++) $n = $n * 26 + ord($a[$i]) - 0x40; return $n - 1; } try { $create_at_start = isset($_REQUEST['create_at_start']) ? $_REQUEST['create_at_start'] : ''; $create_at_end = isset($_REQUEST['create_at_end']) ? $_REQUEST['create_at_end'] : ''; if (!empty($create_at_start) && !empty($create_at_end)) { $sql_str = "SELECT * FROM sanlien_log WHERE SUBSTR(create_at, 1, 10) BETWEEN :create_at_start AND :create_at_end "; $stmt = $conn->prepare($sql_str); $stmt->bindParam(':create_at_start', $create_at_start); $stmt->bindParam(':create_at_end', $create_at_end); } else { $sql_str = "SELECT * FROM sanlien_log "; $stmt = $conn->prepare($sql_str); } $stmt->execute(); $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $sheet->setTitle('三連地震數據'); // 設定標題 $colTitleArr = []; for ($i = 0; $i < $stmt->columnCount(); $i++) { $columnMeta = $stmt->getColumnMeta($i); $colTitleArr[] = $columnMeta['name']; } // 標題寫入 excel 第一列 for ($i = 0; $i < count($colTitleArr); $i++) $sheet->setCellValue(num2alpha($i) . '1', $colTitleArr[$i]); // 設定內容 $data = $stmt->fetchAll(PDO::FETCH_NUM); $i = 2; foreach ($data as $row) { for ($j = 0; $j < count($row); $j++) { $sheet->setCellValue(num2alpha($j) . $i, $row[$j]); } $i++; } $writer = new Xlsx($spreadsheet); $file_path = dirname(dirname(dirname(__DIR__))) . '/wms/excel/' . 'sanlien.xlsx'; $writer->save($file_path); try { $writer->save($file_path); // 回傳檔案路徑給 JavaScript echo json_encode(['data' => $file_path]); } catch (Exception $e) { echo 'Error: ' . $e->getMessage(); } exit(); } catch (PDOException $e) { die("ERROR!!!: " . $e->getMessage()); }