Skip to content

Exportar a excel

Exportar a Excel en CakePHP

A continuación se presenta un ejemplo de cómo exportar datos a un archivo Excel en CakePHP. Este método exporta los datos de los tickets a un archivo CSV.

public function exportOrders() {
$this->autoRender = false;
// FILTROS
//$apartment = $this->request->query('apartment');
//$type = $this->request->query('type');
//$provider = $this->request->query('provider');
//$start_date = $this->request->query('start_date');
//$end_date = $this->request->query('end_date');
// CONDICIONES (FILTROS)
$parking = $this->request->query('p');
$start_date = $this->request->query('start_date');
$end_date = $this->request->query('end_date');
$conditions = array();
if($start_date){
$conditions['Ordersrs.date_order::date >'] = $this->formatDateTime($start_date);
}
if($end_date){
$conditions['Tickets.date_order::date <='] = $this->formatDateTime($end_date);
}
if($parking){
$conditions['Tickets.parking_id'] = $parking;
}
$tickets = $this->Tickets->find('all', [
'contain' => ['Parkings', 'Tariffs', 'Users', 'Vehicles'],
'order' => ['input_date' => 'DESC'],
'conditions' => [$conditions]
]);
if ($tickets->count() > 0) {
$data = array();
foreach($tickets as $ticket){
$line = array();
//$line['total'] = utf8_decode(str_replace('€','EUR',Number::currency($ticket->total, 'EUR')));
$line['total'] = utf8_decode($ticket->total . ' EUR');
$line['input_date'] = utf8_decode($ticket->input_date);
$line['output_date'] = utf8_decode($ticket->output_date);
$line['parking'] = utf8_decode($ticket->parking->name);
$line['vehicle'] = utf8_decode($ticket->vehicle->plate);
$data[] = $line;
}
} else {
$data = array();
$line = array();
$line['total'] = utf8_decode('');
$line['input_date'] = utf8_decode('');
$line['output_date'] = utf8_decode('');
$line['parking'] = utf8_decode('');
$line['vehicle'] = utf8_decode('');
$line['Total'] = utf8_decode('');
$data[] = $line;
}
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename=gastos.csv");
header("Content-Transfer-Encoding: binary");
ob_start();
$df = fopen("php://output", 'w');
fputcsv( $df, array_keys( $data[0] ),";" );
foreach ($data as $row) {
fputcsv($df, $row, ";");
}
fclose($df);
echo ob_get_clean();
die();
}

Este método toma los parámetros de filtro de la URL y genera un archivo CSV con los datos de los tickets. Luego, los encabezados de respuesta se configuran para que el navegador descargue el archivo CSV automáticamente.