Estoy utilizando la libreria PHPExcel para crear archivos Excel 2007 desde PHP al vuelo., pero al momento de descargar el archivo utilizando algo como lo siguiente:
header(‘Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’);
header(‘Content-Disposition: attachment;filename=»pruebas.xlsx»‘);
header(‘Cache-Control: max-age=0’);$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel2007’);
$objWriter->save(‘php://output’);
Y al abrir el excel me aparece un error como el siguiente:
Excel no puede abrir el archivo ‘pruebas.xlsx’ porque el formato o la extensión de éste no son válidos. Compruebe que el archivo no se ha dañado y que la extensión del mismo coincide con el formato del archivo.
Pero el detalle esta en que si se genera para guardar el excel en disco duro, si se abre correctamente, entonceees!., el problema esta en la generación al vuelo que este enviando algo extraño.
La solución esta en el encoding de los archivos PHP, estos deben de estar en modo UTF-8 sin BOM (ANSI as UTF-8), para ver que tipo de codificación tenemos, instalamos el notepad++, despues en la parte inferior derecha aparecerá el encoding y pues verificar que diga ANSI as UTF-8, para convertir solo ingresar al menú Codificación.
Y listo!.., ya podemos crear nuestro archivo Excel., también no olviden verificar que no se mande nada de nada de texto (ni un espacio en blanco., nadaaa!)
Muchas gracias por tu aportación, me fue de gran ayuda
Muchas gracias, había estado buscando mucho sobre esto y no encontraba nada, me salvaste de una.
Excelente ayuda, mil gracias!!
Bueno, tu post me ayudo para hacer una búsqueda mas detallada del error, pero en mi caso no es lo que indicabas exactamente ( referente al encoding de los archivos .php) sino una directiva en el lugar indicado, te dejo el enlace de la solución en mi caso de la web de stackoverflow:
http://stackoverflow.com/questions/21290477/phpexcel-output-unreadable-and-no-errors-thrown
A mi me funciono este metodo, muchas gracias por comentarlo Flavio
Después de estar varios días con el error logré encontrar la solución (como siempre, era cualquier tontera). Simplemente agregar esta línea de código al inicio del script y listo:
header(«Content-type: text/html; charset=utf8»);
Amigo en que parte del codigo lo pusiste, saludos!
gracias
Muchas gracias, me fue de gran ayuda!