• Publicidad

Descargar Excel desde la web

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Descargar Excel desde la web

Notapor panterozo » 2011-06-18 02:54 @162

Estimados:

Busqué en el foro alguna forma de descargar un archivo Excel, y encontré Esto.

Lo modifico para poder descargar un .xls, ya que el .csv retorna una tabla con comas. Esto lo logro utilizando Spreadsheet::Write.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print "Content-Type:application/vnd.ms-excel; name=prueba.xls\r\n";
  2. print "Content-Disposition: attachment; filename=prueba.xls\r\n\n";
  3.  
  4. my $aux;
  5.  
  6. open( FILE, "</tmp/prueba.xls");
  7. while($aux=<FILE>)
  8. {
  9.    print("$aux");
  10. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


El problema es que no aparece nada en el archivo Excel, todo vacío. He probado montones de formas, pero nada :s. No así, sí genero el csv, ya que lo descarga correctamente, y con datos.

Ambos archivos, .csv y .xls los genera correctamente, es un problema en la descarga del archivo.


¡¡¡Help please!!!
panterozo
Perlero nuevo
Perlero nuevo
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400

Publicidad

Re: Descargar Excel desde la web

Notapor explorer » 2011-06-18 03:42 @196

Creo que falta las líneas
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
binmode STDOUT;
binmode FILE;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

entre el open() y el while(). No está en el código original, y sí que es necesario: el fichero Excel es binario, y hay que leerlo y escribirlo como tal.

Casi mejor que el bucle while(), sería mejor leer todo el fichero de golpe:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use CGI;
  2.  
  3. my $excel  = '/tmp/prueba.xls';
  4.  
  5. my $cgi = CGI->new();
  6. print
  7.     $cgi->header(
  8.      -type        => 'application/vnd.ms-excel; name="prueba.xls"',  # vamos a enviar un Excel
  9.      -Disposition => 'attachment; filename="prueba.xls"',            # nombre recomendado para guardarlo en disco
  10. );
  11.  
  12. open (  EXCEL, $excel );
  13. binmode EXCEL;
  14. read  ( EXCEL, my $out, -s $excel );                          # Leemos todo el fichero, de golpe, en $out
  15. close ( EXCEL );
  16.  
  17. binmode STDOUT;                                               # activamos la salida estándar en modo binario
  18. print $out;                                                   # mandamos todo el fichero
  19.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Si no te gusta usar el módulo CGI, puedes quitarlo y cambiar las líneas del header() por las que pusiste antes. Lo principal es ver la forma de leer y enviar el fichero.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Descargar Excel desde la web

Notapor panterozo » 2011-06-18 12:09 @548

Explorer:

Le cambié
-Disposition
por
'Content-Disposition'
, ya que de otra manera, al descargar me dice en vez de prueba.xls, informe.cgi.

El problema era que no estaba cerrando el Excel una vez creado, pero por default al parecer se cierra el archivo una vez saliendo del script, y como yo tengo todo en un solo script, tenía que cerrarlo primero.

Faltaba
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$sp->close();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ahora, con esto y con lo que me dices, puedo descargar el Excel sin problemas ;)

¡¡¡¡Saludos!!!!
panterozo
Perlero nuevo
Perlero nuevo
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado