Vie Oct 10, 2008 8:04 am
|
 |
AgeValed
Perlero Nuevo

|
Registrado: 19 Sep 2008
Mensajes: 21
|
|
| Descargar archivo |
|
|
Buenas, mi consulta es la siguiente: tengo un sub que genera un archivo xls (el archivo pm, tiene varias sub).
Quería saber la forma de que el archivo en cuestión se pueda descargar desde una página, ¿alguna forma? Y si es posible que no quede guardado, si es posible que cuando se apriete ese botón se genere, se descargue ¡y no quede en el servidor!
Cualquier datos que necesiten avisen...
Saludos... ¡y mil gracias por todo!
PD: librería que estoy utilizando: Spreadsheet::WriteExcel
¡Miniejemplo por si necesitan!
| Perl: | use Spreadsheet:: WriteExcel;
sub makeExcelFile {
# Create a new Excel workbook
my $workbook = Spreadsheet:: WriteExcel-> new('perl.xls');
# Add a worksheet
$worksheet = $workbook-> add_worksheet();
# Add and define a format
$format = $workbook-> add_format(); # Add a format
$format-> set_bold();
# Write a formatted and unformatted string, row and column notation.
$worksheet-> write(1, 1, 'Open', $format);
$worksheet-> write(1, 2, 'Send', $format);
$worksheet-> write(1, 3, 'Subjet', $format);
$worksheet-> write(1, 4, 'Percent', $format);
my $rowaux = 2;
while ($rowaux <= 10 ) {
$worksheet-> write($rowaux, 1, 'a');
$worksheet-> write($rowaux, 2, 'b');
$worksheet-> write($rowaux, 3, 'c');
$worksheet-> write($rowaux, 4, 'd');
print $rowaux;
$rowaux ++;
} |
¡¡EDITO!!
Algo así me vendría bárbaro:
| HTML: | [%#Create a button to Export the result to an XLS file#%]
<form method="post" action="export_excel.cgi">
[% FOREACH id = buglist %]
<input type="hidden" name="id" value="[% id FILTER html %]">
[% END %]
<input type="hidden" name="format" value="xls">
<input type="submit" value="Export XLS">
</form> |
Fragmento extraído de http://monocaffe.blogspot.com/2007/08/reportes-en-xls-desde-bugzilla.html , unque no entendí cómo hacerlo...
¡ACLARACIóN!
El archivo está en la carpeta /tmp/, o sea, no puedo poner un <a> en el código con la dirección del archivo, es lo único que me hace falta; el archivo se genera, se guarda en /tmp/ y necesito de alguna forma se ponga en la web un botón o link, ¡lo que sea para descargarlo! |
|
|
|

Vie Oct 10, 2008 5:21 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
|
|
|
|
|
La parte HTML tiene un formulario, donde el usuario lanza el CGI. Y el cgi debe enviar un 'Content-type' para que el cliente web del usuario sepa que tiene que almacenar ese fichero y no intentar abrirlo.
En el programa cgi.pl de la carpeta examples del módulo Spreadsheet::WriteExcel tienes un ejemplo perfecto. |
|
Mar Oct 14, 2008 6:45 am
|
 |
AgeValed
Perlero Nuevo

|
Registrado: 19 Sep 2008
Mensajes: 21
|
|
|
|
|
Ajá, sí es útil eso pero en mi caso no me sirve, dado que en el código tiene parte que manda a la web y parte que guarda en archivo. La página lo que debería hacer es mostrar una tabla y que la tabla tenga un botón que al pulsar el botón descargue el .xls generado que está guardado en la carpeta /tmp del servidor.
Con lo que me pasaste (ya había visto algo parecido) me carga el cuadro y casi todo el código de la web...
Saludos, y si no se puede, veré otra forma de hacerlo... |
|

Mar Oct 14, 2008 7:00 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
|
|
|
|
|
No. El código de cgi.pl genera un Excel, de forma directa, hacia el navegador del usuario. No genera ninguna parte web ni guarda a archivo.
Otra cosa es lo que dices, lo de mostrar una tabla. La tabla la puedes hacer en HTML, y al pulsar el botón, ejecutar el cgi.
El cgi lo que puede hacer es localizar el fichero a enviar en /tmp, mandar las cabeceras como lo hace cgi.pl, y a continuación, abrir el fichero e ir mandando hacia la salida estándar. Ni siquiera es necesario usar ningún módulo Spreadsheet::*. Solo abrir, leer y cerrar un fichero Excel. Con open(), read(), print() y close() sería suficiente. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|