You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

85 lines
2.5 KiB

<?php
require_once('../conn.php');
require dirname(dirname(dirname(__DIR__))) . '/common/composer/vendor/autoload.php';
header("Content-Type: application/json");
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\Fill;
//數字轉英文(0=>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());
}