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 conversin y ahora el error es:
Cita:
El cdigo:Informe clientes.xlsx El formato o extensin de este archivo no es vlido
Cdigo 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 versin 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 Daz") //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") //Descripcin ->setKeywords("Informe tesoreria clientes") //Etiquetas ->setCategory("Informe excel"); //Categorias // Variables para los ttulos 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 automtica 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?