Página 1 de 1

Problemas con el módulo Excel::Writer::XLSX

NotaPublicado: 2012-03-02 12:29 @562
por hugo11ab
¿Qué tal? Nuevamente solicitando de su valiosa ayuda.

El problema que tengo es que estoy generando un reporte en Excel utilizando el módulo Excel::Writer::XLSX.

El reporte se genera satisfactoriamente (.xlxs), pero al momento de dar clic en la liga con la cual descargo el reporte generado, se descarga un archivo .zip en lugar del xlsx; ya revisé la ruta de descarga y está correcta, no sé que pueda estar pasando o por qué se cambia la extensión a .zip

Lo raro es que si cambio la extensión xlsx a xls, ya no tengo problemas y el archivo se descarga sin ningún problema.

¿Dónde puede estar el error?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub reporte {
  2.     &decodificar_valores( $FORM{valores} );
  3.  
  4.     my $archivo;
  5.     $archivo = &rep_autorizado();
  6.  
  7.     #==================================================================
  8.  
  9.     my $table1 = new HTML::Table(
  10.         -cols    => 1,
  11.         -border  => 3,
  12.         -bgcolor => 0,
  13.         -width   => "50%",
  14.         -spacing => 1,
  15.         -padding => 1,
  16.         -style   => "border-collapse:collapse;"
  17.     );
  18.     $table1->setCell( 1, 1, "<font class=\"sBL3b\"><b>NOMBRE DEL ARCHIVO</b> </font>" );
  19.     $table1->setCell( 1, 2, "<font class=\"sBL3b\"><b>ABRIR</b> </font>" );
  20.     $table1->setCell( 1, 3, "<font class=\"sBL3b\"><b>OPCIONES</b> </font>" );
  21.     $table1->setRowBGColor( 1, "#003366" );
  22.  
  23.     $table1->setCell( 2, 1, "<font class=\"sBL4b\">$archivo</font>" );
  24.     $table1->setCell( 2, 2,
  25.         "<a href=\"../../../2012/reportes/$archivo\" target=\"_blank\"> <img src=\"/images/excel.jpg\" alt=\"Abrir Archivo\"></a>"
  26.     );
  27.     $table1->setCell( 2, 3,
  28.         "<button name=\"Regresar\"  type=\"button\" value=\"Regresar\" class='Bsbttn' onClick=\"window.location='$script_name?$url_param'\">Regresar</button>"
  29.     );
  30.     $table1->setRowAlign( 1, "CENTER" );
  31.     $table1->setRowAlign( 2, "CENTER" );
  32.  
  33.     print header;
  34.     &print_cabeza('');                 # esta funcion se encuentra en el (pm)
  35.     print start_multipart_form(
  36.         -action => $script_name,
  37.         -name   => 'form',
  38.         -id     => 'form'
  39.     );
  40.     $table1->print;
  41.     end_form();
  42.     end_html();
  43.     exit;
  44. }
  45.  
  46. sub grep_autorizado {
  47.  
  48.     my $archivo = "COMP_AUTORIZADOS_" . $FORM{clvgerencia} . "_$FORM{nc}" . ".xlsx";
  49.     $workbook = Excel::Writer::XLSX->new("../../../html/2012/reportes/$archivo");
  50.  
  51.     #left,right,bottom,top,bold,pattern,align,fg_color,color,size,valign,font,size,bg_color (color de la trama)
  52.     my $formato_texto  = &formato_texto5( 1, 1, 1, 1, 0, 1, "center", "white", "black", 8, "vcenter", "Arial", 0 );
  53.     my $formato_texto2 = &formato_texto5( 1, 1, 1, 1, 0, 1, "left",   "white", "black", 8, "vcenter", "Arial", 0 );
  54.  
  55.     $color3 = &formato_color( 27, 2, 2, 0, 0 );
  56.     &enca_rep_excel("MOV. AUTORIZADOS");
  57.     &barra_detalle( "$nombre_programa", "$FORM{txtGerencia}" );
  58.  
  59.     #$fg_color,$left,$right,$bottom,$top
  60.     $color2 = &formato_color( 41, 2, 2, 0, 0 );
  61.     $color3 = &formato_color( 41, 2, 2, 0, 0 );
  62.     $color4 = &formato_color( 41, 0, 0, 0, 0 );
  63.     $color5 = &formato_color( 41, 0, 0, 0, 0 );
  64.  
  65.     #los parametros que se mandan para el formato de moneda son
  66.     #($left,$right,$bottom,$top,$bold,$pattern,$fg_color,$size);
  67.     $moneda  = &moneda_formato( 2, 2, 1, 1, 0, 1, "white", 10 );    #la rutina esta en este mismo reporte
  68.     $moneda2 = &moneda_formato( 2, 2, 1, 1, 1, 1, 22,      10 );    #la rutina esta en este mismo reporte
  69.  
  70.     $workbook->close() or die "Error no puedo cerrar el Archivo: $!";
  71.     return $archivo;
  72.     exit;
  73.  
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4

Re: Problemas con el módulo Excel::Writer::XLSX

NotaPublicado: 2012-03-02 13:05 @587
por explorer
El formato xlsx es un fichero XML comprimido en zip.

El problema está en el servidor web, que no sabe qué cabecera MIME debe enviar cuando se encuentra con esa extensión. Entonces, le pregunta al sistema operativo si sabe qué tipo de archivo es. Y este le responde que parece que es un archivo zip, así que eso es lo que indica el servidor web en la cabecera.

Debes agregar ese tipo mime a tu sistema.

Por ejemplo, en mis servidores Debian, en el fichero /etc/mime.types aparece esta línea:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet         xlsx
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Re: Problemas con el módulo Excel::Writer::XLSX

NotaPublicado: 2012-03-02 13:47 @616
por hugo11ab
Gracias, explorer, como siempre muy atinado en tus respuestas. Utilizo Fedora y agregué la línea que me indicaste al fichero mime.types, reinicié el Apache y se solucionó el problema.

¡¡ Gracias !!

Re: Problemas con el módulo Excel::Writer::XLSX

NotaPublicado: 2012-03-02 14:56 @664
por explorer
El problema es usar Fedora, naturalmente.

Re: Problemas con el módulo Excel::Writer::XLSX

NotaPublicado: 2012-03-02 15:28 @686
por hugo11ab
Gracias por la recomendación, probaré con el Debian 6.

¡¡ Saludos !!