Hola buenos día, en realidad no se exactamente si este tema vaya aquí, pues estoy tratando de una mezcla de Java/PHP
En esta oportunidad tengo un problema a la hora de generar un excel. El escenario es el siguiente:
Tenemos una página hecha en php/MySQL y todo estaba bien hasta que nos exigieron generar unos reportes en excel desde otra base de datos que está en SQL Server 2008. El punto es que a la final un compañero sugirió realizar todos los reportes de excel con la libreria POI de java, y utilizar la librería JavaBridge para crear un puente JAVA-PHP. Aunque sonó loco todo funcionó perfecto en nuestros equipos, generamos todos los reportes que nos exigieron, y todos contentos, hasta que llegó el momento de pasarlo a producción, donde han comenzado los dolores de cabeza, pues por alguna extraña razón cuando se genera el archivo pareciera no crearse en el formato xls y cuando abre el excel lo que se ve es pura información basura.
A continuación les coloco la función en Java que genera el excel
Código:
public byte[] generarExcel {
java.io.ByteArrayOutputStream memoryStream = null;
try {
HSSFWorkbook wb = null;
wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();
HSSFRow row = null;
row = sheet.createRow(2);
row.createCell(1).setCellValue("HOLA MUNDO");
memoryStream = new java.io.ByteArrayOutputStream();
wb.write(memoryStream);
memoryStream.close();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
return memoryStream.toByteArray();
}
}
El código es bastante sencillo, esto se compila y el jar creado se coloca en la carpeta de librerías del tomcat.
Luego en el PHP llamamos a esa función de la siguiente manera
Código PHP:
<?php
require_once("../java/Java.inc");
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=archivo.xls");
$reporte = new java("reportes.Compras");
echo java_values($reporte->generarExcel());
?>
Este codigo es bastante sencillo también. Al llamar a esa página desde navegador aparecerá una ventana para guardar o abrir el archivo. Teniendo como resultado lo siguiente un excel con la palabra "HOLA MUNDO".
Ahora bien, cuando se hace eso mismo en el servidor, antes de abrir sale un mensaje que el formato no es el correcto y muestra la siguiente info algo como esto:
"Џࡱက; Root EntryWorkbook Ӑ̇Aဂ@ \p"
Administrador Ba==h\:#8X@"ڀ1Ȁ Arial1ȀArial1ȀArial1ȀArial"$"#
HOLA MUNDO
T
El punto es que sale sin formato, y ya hemos intentado muchas cosas y la verdad no damos con una solución.
Otro punto importante es que si en lugar de generar un jar implementamos el código JAVA directamente en el php, este sin funciona
Código PHP:
<?php
require_once("../java/Java.inc");
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=downloaded.xls");
$workbook = new java("org.apache.poi.hssf.usermodel.HSSFWorkbook");
$sheet = $workbook->createSheet("new sheet");
$row = $sheet->createRow(2);
$cell = $row->createCell(1)->setCellValue("HOLA MUNDO");
$memoryStream = new java("java.io.ByteArrayOutputStream");
$workbook->write($memoryStream);
$memoryStream->close();
echo java_values($memoryStream->toByteArray());
?>
En base a esto puedo pensar que deba ser algo relacionado con el jar, pero la verdad es que no doy con la solución.
Espero que alguien pueda colaborarme con esto. De antemano muchas gracias.
Si necesitan alguna información adicional con gusto se las facilito.
Saludos