环境:php8.3, thinkphp8.0, mysql8.0
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use think\facade\Db;
use think\response\Json;class Index
{public function index(): Json{// 查询 MySQL 数据表数据$employees = Db::name('employee')->field('emp_name, emp_sex, emp_phone, create_time')->select()->toArray();// 创建 PhpSpreadsheet 对象$spreadsheet = new Spreadsheet();$sheet = $spreadsheet->getActiveSheet();// 设置表头$sheet->setCellValue('A1', '姓名');$sheet->setCellValue('B1', '性别');$sheet->setCellValue('C1', '电话');$sheet->setCellValue('D1', '日期');// 设置表头样式:居中对齐和加粗$headerStyle = ['font' => ['bold' => true, // 加粗'size' => 12, // 字体大小],'alignment' => ['horizontal' => Alignment::HORIZONTAL_CENTER, // 水平居中'vertical' => Alignment::VERTICAL_CENTER, // 垂直居中]];// 应用样式到表头$sheet->getStyle('A1:D1')->applyFromArray($headerStyle);// 填充数据$rowNum = 2; // 从第二行开始填充数据foreach ($employees as $employee) {$sheet->setCellValue('A' . $rowNum, $employee['emp_name']);$sheet->setCellValue('B' . $rowNum, $employee['emp_sex']);$sheet->setCellValue('C' . $rowNum, $employee['emp_phone']);$sheet->setCellValue('D' . $rowNum, $employee['create_time']);$rowNum++;}/*$writer = new Xlsx($spreadsheet);$writer->save('demo.xlsx');*/header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');header('Content-Disposition: attachment;filename="myfile.xlsx"');header('Cache-Control: max-age=0');$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');$writer->save('php://output');return json(['code'=>200,'msg'=>'success']);}
}
composer require phpoffice/phpspreadsheet
根据phpspreadsheet官方文档,写了上述代码,如有不懂的地方,请查阅官方文档。