Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/05/2015, 03:31
Mental
 
Fecha de Ingreso: noviembre-2005
Mensajes: 146
Antigüedad: 18 años, 5 meses
Puntos: 1
phpExcell formato del archivo

Buenos días:
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:
Informe clientes.xlsx El formato o extensión de este archivo no es válido
El código:
Código PHP:
Ver original
  1. <?php
  2. include('seguridad.php');
  3. include('conexion.php');
  4. require('fpdf/fpdf.php');
  5. // Se agrega la libreria PHPExcel
  6.  require_once 'excell/Classes/PHPExcel.php';
  7.  require_once 'excell/Classes/PHPExcel/Writer/Excel5.php';     // Para otros bajo la versión xls
  8.  require_once 'excell/Classes/PHPExcel/Writer/Excel2007.php';
  9.  
  10. $var3='2015-03-11';
  11.  
  12. $sql = "SELECT
  13.                     presupuestos.Id_Presupuesto AS Id_Pre,
  14.                     presupuestos.Confirmacion as Estado,
  15.                     presupuestos.Ref_Pres AS Presupuesto,
  16.                     presupuestos.Fecha_fin AS Fecha,
  17.                     presupuestos.Id_Cliente,
  18.                     presupuestos.Total_Pres AS Coste,
  19.                     presupuestos.Depos AS Deposito,
  20.                     clientes.Apellidos AS Cliente
  21.                     FROM clientes INNER JOIN presupuestos ON clientes.Id_clientes = presupuestos.Id_Cliente
  22.                     WHERE presupuestos.Confirmacion != 3 AND YEAR(presupuestos.Fecha_fin) = YEAR('".$var3."') AND WEEK(presupuestos.Fecha_fin,7) = WEEK('".$var3."',7)";
  23. $cs=mysqli_query($cn,$sql) or die(mysqli_error($cn));
  24. // Definimos zona horaria
  25. date_default_timezone_set('Europe/Madrid');
  26.  
  27. // Limitamos el acceso solo desde web.
  28. if (PHP_SAPI == 'cli')
  29.     die('Este archivo solo se puede ver desde un navegador web');
  30.  
  31. // Se crea el objeto PHPExcel
  32.  $objPHPExcel = new PHPExcel();
  33.  
  34. // Se asignan las propiedades del libro
  35. $objPHPExcel->getProperties()->setCreator("Codedrinks") // Nombre del autor
  36.     ->setLastModifiedBy("Julio Díaz") //Ultimo usuario que lo modificó
  37.     ->setTitle("Tesoreria de clientes") // Titulo
  38.     ->setSubject("Generar informe de tesoreria de clientes") //Asunto
  39.     ->setDescription("Informe de debito de clientes a los servicios") //Descripción
  40.     ->setKeywords("Informe tesoreria clientes") //Etiquetas
  41.     ->setCategory("Informe excel"); //Categorias
  42.  
  43. // Variables para los títulos del informe
  44. $tituloReporte = "Tesoreria de clientes de fecha ";
  45. $titulosColumnas = array('PRESUPUESTO', 'CLIENTE', 'SERVICIO', 'USUARIOS', 'PVP', 'TOTAL');
  46.  
  47. // Se combinan las celdas A1 hasta F1, para colocar ahí el titulo del reporte
  48. $objPHPExcel->setActiveSheetIndex(0)
  49.     ->mergeCells('A1:F1');
  50.  
  51. // Se agregan los titulos del reporte
  52. $objPHPExcel->setActiveSheetIndex(0)
  53.     ->setCellValue('A1',$tituloReporte) // Titulo del reporte
  54.     ->setCellValue('A3',  $titulosColumnas[0])  //Titulo de las columnas
  55.     ->setCellValue('B3',  $titulosColumnas[1])
  56.     ->setCellValue('C3',  $titulosColumnas[2])
  57.     ->setCellValue('D3',  $titulosColumnas[3])
  58.     ->setCellValue('E3',  $titulosColumnas[4])
  59.     ->setCellValue('F3',  $titulosColumnas[5]);
  60.  
  61.  
  62. //Se agregan los datos de los CLIENTES
  63.  
  64.  $i = 4; //Numero de fila donde se va a comenzar a rellenar
  65.  while ($fila = $cs->fetch_array()) {
  66.     $Diferencia =  $fila['Coste'] - $fila['Deposito'];
  67.      $objPHPExcel->setActiveSheetIndex(0)
  68.          ->setCellValue('A'.$i, $fila['Presupuesto'])
  69.          ->setCellValue('B'.$i, $fila['Cliente'])
  70.          ->setCellValue('C'.$i, $fila['Cliente'])
  71.          ->setCellValue('D'.$i, $fila['Coste'])
  72.          ->setCellValue('E'.$i, $fila['Deposito'])
  73.          ->setCellValue('F'.$i, $Diferencia);
  74.      $i++;
  75.  }
  76.  
  77.  
  78. // Aplicamos formato a las celdas;
  79.  $estiloTituloReporte = array(
  80.     'font' => array(
  81.         'name'      => 'Verdana',
  82.         'bold'      => true,
  83.         'italic'    => false,
  84.         'strike'    => false,
  85.         'size' =>16,
  86.         'color'     => array(
  87.             'rgb' => 'FFFFFF'
  88.         )
  89.     ),
  90.     'fill' => array(
  91.         'type'  => PHPExcel_Style_Fill::FILL_SOLID,
  92.         'color' => array(
  93.             'argb' => 'FF220835')
  94.     ),
  95.     'borders' => array(
  96.         'allborders' => array(
  97.             'style' => PHPExcel_Style_Border::BORDER_NONE
  98.         )
  99.     ),
  100.     'alignment' => array(
  101.         'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
  102.         'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER,
  103.         'rotation' => 0,
  104.         'wrap' => TRUE
  105.     )
  106. );
  107.  
  108. $estiloTituloColumnas = array(
  109.     'font' => array(
  110.         'name'  => 'Arial',
  111.         'bold'  => true,
  112.         'color' => array(
  113.             'rgb' => 'FFFFFF'
  114.         )
  115.     ),
  116.     'fill' => array(
  117.         'type'       => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR,
  118.     'rotation'   => 90,
  119.         'startcolor' => array(
  120.             'rgb' => 'c47cf2'
  121.         ),
  122.         'endcolor' => array(
  123.             'argb' => 'FF431a5d'
  124.         )
  125.     ),
  126.     'borders' => array(
  127.         'top' => array(
  128.             'style' => PHPExcel_Style_Border::BORDER_MEDIUM ,
  129.             'color' => array(
  130.                 'rgb' => '143860'
  131.             )
  132.         ),
  133.         'bottom' => array(
  134.             'style' => PHPExcel_Style_Border::BORDER_MEDIUM ,
  135.             'color' => array(
  136.                 'rgb' => '143860'
  137.             )
  138.         )
  139.     ),
  140.     'alignment' =>  array(
  141.         'horizontal'=> PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
  142.         'vertical'  => PHPExcel_Style_Alignment::VERTICAL_CENTER,
  143.         'wrap'      => TRUE
  144.     )
  145. );
  146.  
  147. $estiloInformacion = new PHPExcel_Style();
  148. $estiloInformacion->applyFromArray( array(
  149.     'font' => array(
  150.         'name'  => 'Arial',
  151.         'color' => array(
  152.             'rgb' => '000000'
  153.         )
  154.     ),
  155.     'fill' => array(
  156.     'type'  => PHPExcel_Style_Fill::FILL_SOLID,
  157.     'color' => array(
  158.             'argb' => 'FFd9b7f4')
  159.     ),
  160.     'borders' => array(
  161.         'left' => array(
  162.             'style' => PHPExcel_Style_Border::BORDER_THIN ,
  163.         'color' => array(
  164.                 'rgb' => '3a2a47'
  165.             )
  166.         )
  167.     )
  168. ));
  169.  
  170. // Arrays en los cuales se define todo el conjunto de formato que deseamos aplicar a las celdas.
  171. $objPHPExcel->getActiveSheet()->getStyle('A1:D1')->applyFromArray($estiloTituloReporte);
  172. $objPHPExcel->getActiveSheet()->getStyle('A3:D3')->applyFromArray($estiloTituloColumnas);
  173. $objPHPExcel->getActiveSheet()->setSharedStyle($estiloInformacion, "A4:F".($i-1));
  174.  
  175. // asignar el ancho de las columnas de forma automática
  176. for($i = 'A'; $i <= 'F'; $i++){
  177.     $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension($i)->setAutoSize(TRUE);
  178. }
  179.  
  180. // Se asigna el nombre a la hoja
  181. $objPHPExcel->getActiveSheet()->setTitle('Clientes');
  182.  
  183. // Se activa la hoja para que sea la que se muestre cuando el archivo se abre
  184. $objPHPExcel->setActiveSheetIndex(0);
  185.  
  186. // Inmovilizar paneles
  187. //$objPHPExcel->getActiveSheet(0)->freezePane('A4');
  188. $objPHPExcel->getActiveSheet(0)->freezePaneByColumnAndRow(0,6);
  189.  
  190. // Se manda el archivo al navegador web, con el nombre que se indica, en formato 2007
  191. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  192. header('Content-Disposition: attachment;filename="Informe clientes.xlsx"');
  193. header('Cache-Control: max-age=0');
  194.  
  195. $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  196. $objWriter->save('php://output');
  197.  
  198. ?>

Por otro lado:
¿Que sucede si el usuario no tiene instalado el paquete de office?