Foros del Web » Programando para Internet » PHP »

PHPExcel da el siguiente error

Estas en el tema de PHPExcel da el siguiente error en el foro de PHP en Foros del Web. Hola amigos como estais, Vereis estoy usando PHPExcel por recomendacion de algunos compañeros del foro, la cosa es que me da el siguiente error al ...
  #1 (permalink)  
Antiguo 07/02/2013, 15:14
 
Fecha de Ingreso: marzo-2007
Mensajes: 746
Antigüedad: 11 años, 2 meses
Puntos: 4
PHPExcel da el siguiente error

Hola amigos como estais,

Vereis estoy usando PHPExcel por recomendacion de algunos compañeros del foro, la cosa es que me da el siguiente error al crearlo el excel, decir que he probado con un ejemplo por defecto y funciona asique descartamos cosas de configuracion y demas.

Errores:

Warning: Cannot modify header information - headers already sent by (output started at /home/esfera10/public_html/cofranet/cerrar_session.php:8) in /home/esfera10/public_html/cofranet/creando_excel.php on line 108

Warning: Cannot modify header information - headers already sent by (output started at /home/esfera10/public_html/cofranet/cerrar_session.php:8) in /home/esfera10/public_html/cofranet/creando_excel.php on line 109

Warning: Cannot modify header information - headers already sent by (output started at /home/esfera10/public_html/cofranet/cerrar_session.php:8) in /home/esfera10/public_html/cofranet/creando_excel.php on line 110


El archivo completo es este:

Código PHP:
Ver original
  1. <?php
  2. include_once('cerrar_session.php');
  3. include_once('conexion.php');
  4. require_once '../excel/Classes/PHPExcel.php';
  5.  
  6. // Crea un nuevo objeto PHPExcel
  7. $objPHPExcel = new PHPExcel();
  8.  
  9. // Establecer propiedades
  10. $objPHPExcel->getProperties()
  11. ->setCreator("Cattivo")
  12. ->setLastModifiedBy("Cattivo")
  13. ->setTitle("Documento Excel de Prueba")
  14. ->setSubject("Documento Excel de Prueba")
  15. ->setDescription("Demostracion sobre como crear archivos de Excel desde PHP.")
  16. ->setKeywords("Excel Office 2007 openxml php")
  17. ->setCategory("Pruebas de Excel");
  18.  
  19.  
  20.     $consulta = 'SELECT u.Nusuario, u.Ncofradia, u.Avatar, u.Apellidos, u.Nombre, c.cargo, u.Telefono_fijo, u.Mostrar_Telefono_fijo FROM usuarios u inner join cofradias_cargos c ON u.Ncargo = c.Ncargo WHERE u.Ncofradia = '.$_SESSION["Ncofradia"];
  21.  
  22.                                                    
  23.  
  24.  
  25.             if($_POST['Nombre'] != ""){
  26.  
  27.                   $consulta .= " AND Nombre LIKE '%" .$_POST['Nombre']. "%'";
  28.  
  29.             }
  30.  
  31.            
  32.  
  33.             if($_POST['Apellidos'] != ""){
  34.  
  35.                   $consulta .= " AND Apellidos LIKE '%" .$_POST['Apellidos']. "%'";
  36.  
  37.             }
  38.  
  39.            
  40.  
  41.             if($_POST['DNI'] != ""){
  42.  
  43.                   $consulta .= " AND DNI LIKE '%" .$_POST['DNI']. "%'";
  44.  
  45.             }
  46.            
  47.             if($_POST['Cargo'] != ""){
  48.  
  49.                   $consulta .= " AND u.Ncargo = " .$_POST['Cargo'];
  50.  
  51.             }
  52.  
  53.            
  54.  
  55.             if($_POST['Grupo'] != ""){
  56.  
  57.                   $consulta .= " AND u.NUsuario IN ( SELECT NUsuario FROM grupo_usuario WHERE NGrupo = ".$_POST['Grupo']." )";
  58.  
  59.             }          
  60.  
  61.  
  62.  
  63.     $consulta .= ' ORDER by Apellidos, Nombre ';                 
  64.  
  65.     $resultado = mysql_query($consulta,$conexion);
  66.  
  67.     $i = 3;
  68.  
  69.     while ($array_excel = mysql_fetch_array($resultado)){
  70.  
  71.   // Agregar Informacion
  72.   $objPHPExcel->setActiveSheetIndex(0)
  73.   ->setCellValue('A'.$i, $array_excel['Nombre'])
  74.   ->setCellValue('B'.$i, $array_excel['Apellidos'])
  75.   ->setCellValue('C'.$i, $array_excel['fecha_nacimiento'])
  76.   ->setCellValue('D'.$i, $array_excel['DNI'])
  77.   ->setCellValue('E'.$i, $array_excel['fecha_ingreso'])
  78.   ->setCellValue('F'.$i, $array_excel['Direccion'])
  79.   ->setCellValue('G'.$i, $array_excel['Localidad'])
  80.   ->setCellValue('H'.$i, $array_excel['Codigo_Postal'])
  81.   ->setCellValue('I'.$i, $array_excel['Telefono_fijo'])
  82.   ->setCellValue('J'.$i, $array_excel['Telefono_movil'])
  83.   ->setCellValue('K'.$i, $array_excel['Email']);                   
  84.    
  85.     $i++;
  86. }
  87.  
  88. $objPHPExcel->setActiveSheetIndex()->setCellValue('A1', 'Nombre');
  89. $objPHPExcel->setActiveSheetIndex()->setCellValue('B1', 'Apellidos');
  90. $objPHPExcel->setActiveSheetIndex()->setCellValue('C1', 'Fecha de nacimiento');
  91. $objPHPExcel->setActiveSheetIndex()->setCellValue('D1', 'DNI');
  92. $objPHPExcel->setActiveSheetIndex()->setCellValue('E1', 'Fecha de ingreso');
  93. $objPHPExcel->setActiveSheetIndex()->setCellValue('F1', 'Direccion');
  94. $objPHPExcel->setActiveSheetIndex()->setCellValue('G1', 'Localidad');
  95. $objPHPExcel->setActiveSheetIndex()->setCellValue('H1', 'Codigo postal');
  96. $objPHPExcel->setActiveSheetIndex()->setCellValue('I1', 'Telefono fijo');
  97. $objPHPExcel->setActiveSheetIndex()->setCellValue('J1', 'Telefono movil');
  98. $objPHPExcel->setActiveSheetIndex()->setCellValue('K1', 'Email');
  99.  
  100. // Renombrar Hoja
  101. $objPHPExcel->getActiveSheet()->setTitle('Tecnologia Simple');
  102.  
  103. // Establecer la hoja activa, para que cuando se abra el documento se muestre primero.
  104. $objPHPExcel->setActiveSheetIndex(0);
  105.  
  106. // Se modifican los encabezados del HTTP para indicar que se envia un archivo de Excel.
  107. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  108. header('Content-Disposition: attachment;filename="pruebaReal.xlsx"');
  109. header('Cache-Control: max-age=0');
  110. $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
  111. $objWriter->save('php://output');
  112. ?>


A ver si alguien sabe un poco del tema y puede orientarme un poquito sobre lo que puede estar pasando.

Un saludo
  #2 (permalink)  
Antiguo 07/02/2013, 15:21
Avatar de ocp001a
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 2.956
Antigüedad: 10 años
Puntos: 517
Respuesta: PHPExcel da el siguiente error

No estoy muy seguro ya que no uso el método de pasar el excel directo al usuario (yo lo guardo en el servidor primero) pero creo que phpexcel ya te genera las cabeceras necesarias.

Por otra parte, es el clásico problema de que tu script está dando una salida antes de hacer el header correcto.
  #3 (permalink)  
Antiguo 07/02/2013, 15:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 10 años, 1 mes
Puntos: 2529
Respuesta: PHPExcel da el siguiente error

Como norma y para evitar estos problemas debes evitar cualquier salida, creo que ya lo sabes.

Pero lo que no sabes es que los include/require que tienes en tu código posiblemente tengan un espacio/salto de linea no antes de <?php sino después del último ?>.

La idea es que si el script contiene únicamente código PHP dicho tag de cierre (?>) debe ser omitido del archivo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 07/02/2013, 15:30
 
Fecha de Ingreso: marzo-2007
Mensajes: 746
Antigüedad: 11 años, 2 meses
Puntos: 4
Respuesta: PHPExcel da el siguiente error

Gracias por vuestra atencion amigos,

No habia caido en lo de la salida, he probado a quitar:

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="pruebaReal.xlsx"');
header('Cache-Control: max-age=0');

y no me muestra ningun error pero me muestra en la pagina un monton de caracteres raros:

ÜJ<§œZ1½0?YÙL%zV cäÖIb7؇û‰ìa/lÙ¥P1:«qáríÍjªÊj0A¯–Íuë""íàÙ(Œ ”Á€WìMä)Tjå({ܲû>óOãÂ,XÙ*ÁÚÆ>Bÿ†~×*Ï‚õÓ¤6ÜJ=¡oBZ¾ ‡°¼tìíX4Êú¾Cgñ,…ˆ’QgmrL

Como esto pero toda la pagina llena, y no crea el archivo

gracias de nuevo amigos
  #5 (permalink)  
Antiguo 07/02/2013, 15:35
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 10 años, 1 mes
Puntos: 2529
Respuesta: PHPExcel da el siguiente error

Es que haces cosas que no deberías hacer y resultan cosas que deben pasar pero que no entiendes.

Esos caracteres corresponden a la información binaria del archivo, ya que se está enviando al navegador directamente las cabeceras que quitaste eran clave.

El mensaje que recibías decía esto:
Cita:
output started at /home/esfera10/public_html/cofranet/cerrar_session.php:8
Y si alcanzas a leer dice que la salida esta siendo provocada en el script cerrar_sesion.php en la linea 8, me pregunto que puede haber ahí.

Y mejor aún, pregunto si has leído mi respuesta anterior.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 07/02/2013, 15:42
 
Fecha de Ingreso: marzo-2007
Mensajes: 746
Antigüedad: 11 años, 2 meses
Puntos: 4
Respuesta: PHPExcel da el siguiente error

Amigo he quitado el include que añadia "cerrar_sesion.php" y he añadido los header, pero me sigue saliendo los mismos errores de los header.

Este es el archivo tal y como esta ahoramismo:

Código PHP:
Ver original
  1. <?
  2. $conexion = mysql_connect("localhost", "esfera10_franjgg", "123456");
  3. mysql_select_db("esfera10_Dsarrollo", $conexion);
  4. require_once '../excel/Classes/PHPExcel.php';
  5.  
  6. // Crea un nuevo objeto PHPExcel
  7. $objPHPExcel = new PHPExcel();
  8.  
  9. // Establecer propiedades
  10. $objPHPExcel->getProperties()
  11. ->setCreator("Cattivo")
  12. ->setLastModifiedBy("Cattivo")
  13. ->setTitle("Documento Excel de Prueba")
  14. ->setSubject("Documento Excel de Prueba")
  15. ->setDescription("Demostracion sobre como crear archivos de Excel desde PHP.")
  16. ->setKeywords("Excel Office 2007 openxml php")
  17. ->setCategory("Pruebas de Excel");
  18.  
  19.  
  20.      $consulta = 'SELECT u.Nusuario, u.Ncofradia, u.Avatar, u.Apellidos, u.Nombre, c.cargo, u.Telefono_fijo, u.Mostrar_Telefono_fijo FROM usuarios u inner join cofradias_cargos c ON u.Ncargo = c.Ncargo WHERE u.Ncofradia = 1';
  21.  
  22.                                                    
  23.  
  24.  
  25.             if($_GET['nombre'] != ""){
  26.  
  27.                   $consulta .= " AND Nombre LIKE '%" .$_GET['nombre']. "%'";
  28.  
  29.             }
  30.  
  31.            
  32.  
  33.             if($_GET['apellidos'] != ""){
  34.  
  35.                   $consulta .= " AND Apellidos LIKE '%" .$_GET['apellidos']. "%'";
  36.  
  37.             }
  38.  
  39.            
  40.  
  41.             if($_GET['dni'] != ""){
  42.  
  43.                   $consulta .= " AND DNI LIKE '%" .$_GET['dni']. "%'";
  44.  
  45.             }
  46.            
  47.             if($_GET['cargo'] != ""){
  48.  
  49.                   $consulta .= " AND u.Ncargo = " .$_GET['cargo'];
  50.  
  51.             }
  52.  
  53.            
  54.  
  55.             if($_GET['grupo'] != ""){
  56.  
  57.                   $consulta .= " AND u.NUsuario IN ( SELECT NUsuario FROM grupo_usuario WHERE NGrupo = ".$_GET['grupo']." )";
  58.  
  59.             }          
  60.  
  61.  
  62.  
  63.     echo $consulta .= ' ORDER by Apellidos, Nombre ';                
  64.  
  65.     $resultado = mysql_query($consulta,$conexion);
  66.  
  67.     $i = 3;
  68.  
  69.     while ($array_excel = mysql_fetch_array($resultado)){
  70.  
  71.   // Agregar Informacion
  72.   $objPHPExcel->setActiveSheetIndex(0)
  73.   ->setCellValue('A'.$i, $array_excel['Nombre'])
  74.   ->setCellValue('B'.$i, $array_excel['Apellidos'])
  75.   ->setCellValue('C'.$i, $array_excel['fecha_nacimiento'])
  76.   ->setCellValue('D'.$i, $array_excel['DNI'])
  77.   ->setCellValue('E'.$i, $array_excel['fecha_ingreso'])
  78.   ->setCellValue('F'.$i, $array_excel['Direccion'])
  79.   ->setCellValue('G'.$i, $array_excel['Localidad'])
  80.   ->setCellValue('H'.$i, $array_excel['Codigo_Postal'])
  81.   ->setCellValue('I'.$i, $array_excel['Telefono_fijo'])
  82.   ->setCellValue('J'.$i, $array_excel['Telefono_movil'])
  83.   ->setCellValue('K'.$i, $array_excel['Email']);                   
  84.    
  85.     $i++;
  86. }
  87.  
  88. $objPHPExcel->setActiveSheetIndex()->setCellValue('A1', 'Nombre');
  89. $objPHPExcel->setActiveSheetIndex()->setCellValue('B1', 'Apellidos');
  90. $objPHPExcel->setActiveSheetIndex()->setCellValue('C1', 'Fecha de nacimiento');
  91. $objPHPExcel->setActiveSheetIndex()->setCellValue('D1', 'DNI');
  92. $objPHPExcel->setActiveSheetIndex()->setCellValue('E1', 'Fecha de ingreso');
  93. $objPHPExcel->setActiveSheetIndex()->setCellValue('F1', 'Direccion');
  94. $objPHPExcel->setActiveSheetIndex()->setCellValue('G1', 'Localidad');
  95. $objPHPExcel->setActiveSheetIndex()->setCellValue('H1', 'Codigo postal');
  96. $objPHPExcel->setActiveSheetIndex()->setCellValue('I1', 'Telefono fijo');
  97. $objPHPExcel->setActiveSheetIndex()->setCellValue('J1', 'Telefono movil');
  98. $objPHPExcel->setActiveSheetIndex()->setCellValue('K1', 'Email');
  99.  
  100. // Renombrar Hoja
  101. $objPHPExcel->getActiveSheet()->setTitle('Tecnologia Simple');
  102.  
  103. // Establecer la hoja activa, para que cuando se abra el documento se muestre primero.
  104. $objPHPExcel->setActiveSheetIndex(0);
  105.  
  106. // Se modifican los encabezados del HTTP para indicar que se envia un archivo de Excel.
  107. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  108. header('Content-Disposition: attachment;filename="pruebaReal.xlsx"');
  109. header('Cache-Control: max-age=0');
  110. $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
  111. $objWriter->save('php://output');
  112. ?>

y estos son los erros y caracteres que arroja:

Warning: Cannot modify header information - headers already sent by (output started at /home/esfera10/public_html/cofranet/creando_excel.php:63) in /home/esfera10/public_html/cofranet/creando_excel.php on line 107

Warning: Cannot modify header information - headers already sent by (output started at /home/esfera10/public_html/cofranet/creando_excel.php:63) in /home/esfera10/public_html/cofranet/creando_excel.php on line 108

Warning: Cannot modify header information - headers already sent by (output started at /home/esfera10/public_html/cofranet/creando_excel.php:63) in /home/esfera10/public_html/cofranet/creando_excel.php on line 109
PKM„GBG’D²Xð[Content_Types].xml*”MNÃ0…÷œ"ò%nY „švAa •(0ö¤±êØ–gúw{&i ‰@ÕnbEö{ßøyìÑdÛ¸l m𥑁×ÁX¿(ÅÛü)¿’òF¹à¡;@1_æ»˜±Øc)j¢x/%ê…Eˆày¦ ©QÄ¿i!£ÒKµy3ÜJ<§œZ1½0?YÙL%zV cäÖIb7؇û‰ìa/lÙ¥P1:«qáríÍjªÊj0A¯


Perdon amigo, probe a quitar los header para ver si quitaba los errores pero claro estos son vitales.
  #7 (permalink)  
Antiguo 07/02/2013, 15:55
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 10 años, 1 mes
Puntos: 2529
Respuesta: PHPExcel da el siguiente error

Pues el procedimiento de análisis es el mismo, mira ahora:
Cita:
output started at /home/esfera10/public_html/cofranet/creando_excel.php:63
¿Ya viste que tienes en dicha linea?
Código PHP:
echo $consulta .= ' ORDER by Apellidos, Nombre '
Lo único que veo mal ahí es el echo, pero sigues sin prestar atención.

PDTA: aprende a leer los mensajes de error, ahí está la clave.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 07/02/2013, 15:57
 
Fecha de Ingreso: marzo-2007
Mensajes: 746
Antigüedad: 11 años, 2 meses
Puntos: 4
Respuesta: PHPExcel da el siguiente error

Amigo ya encontre el error, perdon por la torpeza resulto que no habia quitado el echo para mostrar la consulta.

Un saludo y mil gracias amigo
  #9 (permalink)  
Antiguo 30/01/2018, 11:38
 
Fecha de Ingreso: septiembre-2010
Mensajes: 350
Antigüedad: 7 años, 7 meses
Puntos: 8
Respuesta: PHPExcel da el siguiente error

Cita:
Iniciado por pateketrueke Ver Mensaje
Como norma y para evitar estos problemas debes evitar cualquier salida, creo que ya lo sabes.

Pero lo que no sabes es que los include/require que tienes en tu código posiblemente tengan un espacio/salto de linea no antes de <?php sino después del último ?>.

La idea es que si el script contiene únicamente código PHP dicho tag de cierre (?>) debe ser omitido del archivo.
Gracias me funcionó en el PHPExcel, por tener ?> dentro de includes de includes jaa



La zona horaria es GMT -6. Ahora son las 17:39.