键 例:['A' => 'name', 'B' => 'age', 'C' => 'sex'] * @return array */ function xlsx_reader(string $file, int $initial_row = 1, array $keys_map = []): array { $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx'); // 读取文件 $spreadsheet = $reader->load($file); // 获取活动sheet $sheet = $spreadsheet->getActiveSheet(); // 获取最大行 $max_row = $sheet->getHighestRow(); // 获取最大列 $max_col = $sheet->getHighestColumn(); $xlsx_data = []; $first_col = ord('A'); $last_col = ord($max_col); for ($row = $initial_row; $row <= $max_row; $row++) { for ($col = $first_col; $col <= $last_col; $col++) { $key = $col_chr = chr($col); if (!empty($keys_map)) { $key = $keys_map[$col_chr] ?? $col_chr; } $xlsx_data[$row][$key] = $sheet->getCell($col_chr . $row)->getValue(); } } return $xlsx_data; } } if (!function_exists('xlsx_writer')) { /** * 构建Excel数据 * @param array $data 数据 例:[['name'=>'张三','age'=>18, 'sex'=>'男']] * @param array $schema 表头信息 例:['name' => '姓名', 'age' => '年龄', 'sex' => '性别'] * @param string $filename 下载文件名称 默认为YmdHis时间 * @return \PhpOffice\PhpSpreadsheet\Writer\IWriter */ function xlsx_writer(array|\think\model\Collection $data, array $schema, string $filename = ''): \PhpOffice\PhpSpreadsheet\Writer\IWriter { // 获取Spreadsheet对象 $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); // 写入表头 $title = array_values($schema); $title_col = 'A'; foreach ($title as $value) { // 单元格内容写入 $sheet->setCellValue($title_col . '1', $value); $title_col++; } // 写入数据 $row = 2; $keys = array_keys($schema); foreach ($data as $item) { $data_col = 'A'; foreach ($keys as $key) { $sheet->setCellValue($data_col . $row, $item[$key] ?? ''); $data_col++; } $row++; } flush(); ob_flush(); if ($filename == '') $filename = date('YmdHis'); header('Access-Control-Expose-Headers: Content-Disposition'); header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; Charset=UTF-8'); header('Content-Disposition: attachment;filename=' . $filename . '.xlsx'); header('Cache-Control: max-age=0'); return \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx'); } }