如何将搜索结果导出至Excel文档?附搜索栏代码求助
解决搜索结果导出到Excel的问题
嘿,这完全可行的!你已经搞定了搜索栏和Excel写入工具的基础部分,现在只需要把搜索到的结果集传递给Excel工具就行,咱们一步步来捋清楚:
第一步:把搜索结果收集到数组里
你现有的查询已经能获取到匹配的记录,接下来把这些记录存到一个数组中,方便后续Excel工具调用处理:
<?php include ('database_conn.php'); $output = ''; $results = []; // 新增数组用来存储搜索结果 if(isset($_POST['search'])) { $search = $_POST['search']; $search = preg_replace("#[^0-9a-z]i#","", $search); // 推荐用预处理语句防止SQL注入(替换你原来的mysqli_query写法) $stmt = $conn->prepare("SELECT * FROM attendance WHERE stud_id LIKE ?"); $searchParam = "%$search%"; $stmt->bind_param("s", $searchParam); $stmt->execute(); $result = $stmt->get_result(); // 把查询结果转成关联数组,方便后续遍历 while ($row = $result->fetch_assoc()) { $results[] = $row; } $stmt->close(); } ?>
第二步:将结果数组传给Excel写入工具
假设你用的是主流的PhpSpreadsheet工具,下面是一个简单示例,把$results数组里的数据写入Excel并触发浏览器下载:
// 引入PhpSpreadsheet(如果是其他Excel工具,替换成对应的初始化代码) require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; // 初始化Excel对象 $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); // 写入表头(根据你的attendance表实际字段调整) $sheet->setCellValue('A1', '学生ID'); $sheet->setCellValue('B1', '姓名'); $sheet->setCellValue('C1', '考勤日期'); $sheet->setCellValue('D1', '考勤状态'); // 遍历结果数组,逐行写入数据 $currentRow = 2; // 从第二行开始写数据(第一行是表头) foreach ($results as $record) { $sheet->setCellValue('A' . $currentRow, $record['stud_id']); $sheet->setCellValue('B' . $currentRow, $record['name']); // 替换成你表中的实际字段 $sheet->setCellValue('C' . $currentRow, $record['attendance_date']); $sheet->setCellValue('D' . $currentRow, $record['status']); $currentRow++; } // 设置响应头,让浏览器识别并下载Excel文件 header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="考勤搜索结果.xlsx"'); header('Cache-Control: max-age=0'); // 输出Excel文件到浏览器 $writer = new Xlsx($spreadsheet); $writer->save('php://output'); exit;
关键提示
- 如果你的Excel工具是其他库(比如旧版PHPExcel),只需要把遍历
$results数组写入单元格的逻辑适配过去就行,核心思路完全一致。 - 一定要用预处理语句替代直接拼接SQL的写法,这能有效避免SQL注入风险,是生产环境的必备最佳实践。
内容的提问来源于stack exchange,提问作者harry
相关产品推荐
相关产品推荐

