prepare($query); // Bind parameter pencarian if (!empty($search)) { $stmt->bindValue(':search', "%{$search}%", PDO::PARAM_STR); } $stmt->execute(); $data = $stmt->fetchAll(PDO::FETCH_ASSOC); // Buat Spreadsheet $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); // Set header kolom $sheet->setCellValue('A1', 'No') ->setCellValue('B1', 'Nama') ->setCellValue('C1', 'NIK') ->setCellValue('D1', 'ID Pelanggan') ->setCellValue('E1', 'Akun Hotspot') ->setCellValue('F1', 'Alamat') ->setCellValue('G1', 'Latitude') ->setCellValue('H1', 'Longitude') ->setCellValue('I1', 'Nomor Whatsapp') ->setCellValue('J1', 'Email') ->setCellValue('K1', 'Mulai Berlangganan') ->setCellValue('L1', 'Server') ->setCellValue('M1', 'Mikrotik') ->setCellValue('N1', 'Paket Berlangganan') ->setCellValue('O1', 'Status Koneksi') ->setCellValue('P1', 'IP Address') ->setCellValue('Q1', 'Last Update') ->setCellValue('R1', 'RX Power ONU') ->setCellValue('S1', 'TX Power ONU'); // Isi data $row = 2; $no = 1; foreach ($data as $item) { // Kolom No otomatis $sheet->setCellValue('A' . $row, $no); // Kolom text sensitif (pakai Explicit supaya tidak error di Excel) $sheet->setCellValueExplicit('B' . $row, $item['nama'] ?? '', DataType::TYPE_STRING); $sheet->setCellValueExplicit('C' . $row, $item['nik'] ?? '', DataType::TYPE_STRING); $sheet->setCellValueExplicit('D' . $row, $item['akun'] ?? '', DataType::TYPE_STRING); $sheet->setCellValueExplicit('E' . $row, $item['user_hotspot'] ?? '', DataType::TYPE_STRING); $sheet->setCellValueExplicit('F' . $row, $item['alamat'] ?? '', DataType::TYPE_STRING); $sheet->setCellValueExplicit('G' . $row, $item['latitude'] ?? '', DataType::TYPE_STRING); $sheet->setCellValueExplicit('H' . $row, $item['longitude'] ?? '', DataType::TYPE_STRING); $sheet->setCellValueExplicit('I' . $row, $item['nomor_whatsapp'] ?? '', DataType::TYPE_STRING); $sheet->setCellValueExplicit('J' . $row, $item['email'] ?? '', DataType::TYPE_STRING); // Kolom tanggal & teks biasa $sheet->setCellValue('K' . $row, $item['time_start'] ?? ''); $sheet->setCellValue('L' . $row, $item['nama_server'] ?? ''); $sheet->setCellValue('M' . $row, $item['nama_mikrotik'] ?? ''); $sheet->setCellValue('N' . $row, $item['nama_paket'] ?? ''); $sheet->setCellValue('O' . $row, $item['status_koneksi'] ?? ''); $sheet->setCellValue('P' . $row, $item['ip_address'] ?? ''); $sheet->setCellValue('Q' . $row, $item['time_update'] ?? ''); // RX & TX Power dummy $sheet->setCellValue('R' . $row, 'inf'); $sheet->setCellValue('S' . $row, 'inf'); $row++; $no++; } // Set header download header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="data_export_pelanggan_aktif.xlsx"'); header('Cache-Control: max-age=0'); // Output file $writer = new Xlsx($spreadsheet); $writer->save('php://output'); exit;