Objetivo generar un archivo excell.
Libreria PHPExcel_1.8.0
Software: Excell 2003 y fileformat_convert instalado.
El problema es un mensaje de error al intentar abrir el archivo excell. Inicialmente era que la version del archivo era posterior al software 2003. Instalé el paquete de conversión y ahora el error es:
Cita:
El código:Informe clientes.xlsx El formato o extensión de este archivo no es válido
Código PHP:
Ver original
<?php include('seguridad.php'); include('conexion.php'); require('fpdf/fpdf.php'); // Se agrega la libreria PHPExcel require_once 'excell/Classes/PHPExcel.php'; require_once 'excell/Classes/PHPExcel/Writer/Excel5.php'; // Para otros bajo la versión xls require_once 'excell/Classes/PHPExcel/Writer/Excel2007.php'; $var3='2015-03-11'; $sql = "SELECT presupuestos.Id_Presupuesto AS Id_Pre, presupuestos.Confirmacion as Estado, presupuestos.Ref_Pres AS Presupuesto, presupuestos.Fecha_fin AS Fecha, presupuestos.Id_Cliente, presupuestos.Total_Pres AS Coste, presupuestos.Depos AS Deposito, clientes.Apellidos AS Cliente FROM clientes INNER JOIN presupuestos ON clientes.Id_clientes = presupuestos.Id_Cliente WHERE presupuestos.Confirmacion != 3 AND YEAR(presupuestos.Fecha_fin) = YEAR('".$var3."') AND WEEK(presupuestos.Fecha_fin,7) = WEEK('".$var3."',7)"; // Definimos zona horaria // Limitamos el acceso solo desde web. if (PHP_SAPI == 'cli') // Se crea el objeto PHPExcel $objPHPExcel = new PHPExcel(); // Se asignan las propiedades del libro $objPHPExcel->getProperties()->setCreator("Codedrinks") // Nombre del autor ->setLastModifiedBy("Julio Díaz") //Ultimo usuario que lo modificó ->setTitle("Tesoreria de clientes") // Titulo ->setSubject("Generar informe de tesoreria de clientes") //Asunto ->setDescription("Informe de debito de clientes a los servicios") //Descripción ->setKeywords("Informe tesoreria clientes") //Etiquetas ->setCategory("Informe excel"); //Categorias // Variables para los títulos del informe $tituloReporte = "Tesoreria de clientes de fecha "; // Se combinan las celdas A1 hasta F1, para colocar ahí el titulo del reporte $objPHPExcel->setActiveSheetIndex(0) ->mergeCells('A1:F1'); // Se agregan los titulos del reporte $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A1',$tituloReporte) // Titulo del reporte ->setCellValue('A3', $titulosColumnas[0]) //Titulo de las columnas ->setCellValue('B3', $titulosColumnas[1]) ->setCellValue('C3', $titulosColumnas[2]) ->setCellValue('D3', $titulosColumnas[3]) ->setCellValue('E3', $titulosColumnas[4]) ->setCellValue('F3', $titulosColumnas[5]); //Se agregan los datos de los CLIENTES $i = 4; //Numero de fila donde se va a comenzar a rellenar while ($fila = $cs->fetch_array()) { $Diferencia = $fila['Coste'] - $fila['Deposito']; $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A'.$i, $fila['Presupuesto']) ->setCellValue('B'.$i, $fila['Cliente']) ->setCellValue('C'.$i, $fila['Cliente']) ->setCellValue('D'.$i, $fila['Coste']) ->setCellValue('E'.$i, $fila['Deposito']) ->setCellValue('F'.$i, $Diferencia); $i++; } // Aplicamos formato a las celdas; 'name' => 'Verdana', 'bold' => true, 'italic' => false, 'strike' => false, 'size' =>16, 'rgb' => 'FFFFFF' ) ), 'type' => PHPExcel_Style_Fill::FILL_SOLID, 'argb' => 'FF220835') ), 'style' => PHPExcel_Style_Border::BORDER_NONE ) ), 'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER, 'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER, 'rotation' => 0, 'wrap' => TRUE ) ); 'name' => 'Arial', 'bold' => true, 'rgb' => 'FFFFFF' ) ), 'type' => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR, 'rotation' => 90, 'rgb' => 'c47cf2' ), 'argb' => 'FF431a5d' ) ), 'style' => PHPExcel_Style_Border::BORDER_MEDIUM , 'rgb' => '143860' ) ), 'style' => PHPExcel_Style_Border::BORDER_MEDIUM , 'rgb' => '143860' ) ) ), 'horizontal'=> PHPExcel_Style_Alignment::HORIZONTAL_CENTER, 'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER, 'wrap' => TRUE ) ); $estiloInformacion = new PHPExcel_Style(); 'name' => 'Arial', 'rgb' => '000000' ) ), 'type' => PHPExcel_Style_Fill::FILL_SOLID, 'argb' => 'FFd9b7f4') ), 'style' => PHPExcel_Style_Border::BORDER_THIN , 'rgb' => '3a2a47' ) ) ) )); // Arrays en los cuales se define todo el conjunto de formato que deseamos aplicar a las celdas. $objPHPExcel->getActiveSheet()->getStyle('A1:D1')->applyFromArray($estiloTituloReporte); $objPHPExcel->getActiveSheet()->getStyle('A3:D3')->applyFromArray($estiloTituloColumnas); $objPHPExcel->getActiveSheet()->setSharedStyle($estiloInformacion, "A4:F".($i-1)); // asignar el ancho de las columnas de forma automática for($i = 'A'; $i <= 'F'; $i++){ $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension($i)->setAutoSize(TRUE); } // Se asigna el nombre a la hoja $objPHPExcel->getActiveSheet()->setTitle('Clientes'); // Se activa la hoja para que sea la que se muestre cuando el archivo se abre $objPHPExcel->setActiveSheetIndex(0); // Inmovilizar paneles //$objPHPExcel->getActiveSheet(0)->freezePane('A4'); $objPHPExcel->getActiveSheet(0)->freezePaneByColumnAndRow(0,6); // Se manda el archivo al navegador web, con el nombre que se indica, en formato 2007 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); exit; ?>
Por otro lado:
¿Que sucede si el usuario no tiene instalado el paquete de office?





