Si la comunidad lo puede mejorar que bien :DD
Ok eso esta mal les dejo un método para evitar eso y crear un a partir de un array un bonito excel de múltiples hojas
Enjoy the method :P
Código PHP:
<?php
public static function createExcelFromArray($dataExcel, $titulo_excel = null, $descripcion = null, $owner = null, $file = null) {
$objPHPExcel = new PHPExcel();
if (!empty($owner)) {
$objPHPExcel->getProperties()->setCreator($owner);
} else {
$objPHPExcel->getProperties()->setCreator("Creador");
}
if (!is_null($titulo_excel)) {
$objPHPExcel->getProperties()->setTitle($titulo_excel);
}
if (!empty($descripcion)) {
$objPHPExcel->getProperties()->setDescription($descripcion);
}
$objPHPExcel->getDefaultStyle()->getFont()->setName('Tahoma');
$objPHPExcel->getDefaultStyle()->getFont()->setSize(10);
foreach ($dataExcel AS $hoja => $datos) {
if ($hoja > 0) {
$objPHPExcel->createSheet($hoja);
}
$objPHPExcel->setActiveSheetIndex($hoja); //numero de hoja
$objPHPExcel->getActiveSheet()->setTitle(($datos['titulo'] === '' || is_null($datos['titulo']) ? 'Hoja ' . ($hoja + 1) : $datos['titulo']));
$columna = 0;
foreach ($datos['headers'] as $index => $titulo) {
$objPHPExcel->getActiveSheet()->getColumnDimensionByColumn($columna)->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getStyleByColumnAndRow($columna, 1)->getFont()->setBold(true);
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($columna++, 1, $titulo);
}
$fila = 2;
$columna = 0;
foreach ($datos['data'] as $value) {
foreach ($datos['headers'] as $index => $title_header) {
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($columna++, $fila, $value[$index]);
}
$columna = 0;
$fila++;
}
}
$objPHPExcel->setActiveSheetIndex(0);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
if (empty($file)) {
$objWriter->save('php://output');
} else {
$objWriter->save($file);
}
}
Código PHP:
<?php
$dataExcel = array(
array(
'headers' => array(
'cabecera_1' => 'Título 1',
'cabecera_2' => 'Título 2',
'cabecera_3' => 'Título 3'
),
'data' => $array_db_1,
'titulo' => 'Hoja 1'),
array(
'headers' => array(
'cabecera_1' => 'Título 1',
'cabecera_2' => 'Título 2',
'cabecera_3' => 'Título 3'
),
'data' => $array_db_2,
'titulo' => 'Hoja 2')
);
header("Content-Type: application/vnd.ms-excel; charset=utf-8");
header("Content-type: application/x-msexcel; charset=utf-8");
header("Content-Disposition: attachment; filename=estadisticas-campanas-" . $cliente . "_" . time() . ".xls");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false);
echo Tools::createExcelFromArray($dataExcel, 'Nuestro titulo');