Excel

Ho creato un bel giochino per trasforare un tabulato in un excel.
Rimane un nodo insoluto:
per inviare il file all’utente devo salvare il file su disco e poi lo
invio.
Il file mi rimane sul disco

Domandone: E’ possibile inviare il file xls senza salvarlo sul disco?

Ciao Michele.

2008/10/1 Michele C. [email protected]:

Ho creato un bel giochino per trasforare un tabulato in un excel.
Rimane un nodo insoluto:
per inviare il file all’utente devo salvare il file su disco e poi lo
invio.
Il file mi rimane sul disco

Domandone: E’ possibile inviare il file xls senza salvarlo sul disco?

dai un’occhiata alla documentazione

http://api.rubyonrails.com/classes/ActionController/Streaming.html#M000624
http://api.rubyonrails.com/classes/ActionController/Streaming.html#M000623

michele

Il problema non è l’invio dei file ma come posso “serializzare” il
documento excel senza doverlo salvare sul disco.
Attualmente utilizzo send_file, ma vorrei non salvare il file e inviare
i dati tramite send_data.

Ciao Michele.

Ho creato una classe (in lib) per gestire l’excel la allego (magari può
risultare utile anche ad altri)
P.S. Può essere utilizzata anche fuori da rails

un esempio di come uso la classe.

da qui<<
require “elabxls”
fogli = [‘Pippo’, ‘Pluto’]

x = Xls.new ‘c:/topolina.xls’ , fogli
x.elabora do
x.cambia_foglio ‘Pippo’
x.scrivi_cella 1, 1, ‘Amico di Topolino’
x.scrivi_cella 2, 1, ‘Si trasfoma in SuperPippo’

x.cambia_foglio ‘Pluto’
x.scrivi_cella 1, 1, ‘Simpatico cane’

x.salva_file
end

a qui <<

Utilizzando il metodo elabora quando esci dal ciclo viene liberata la
memoria (anche da excel).

Ciao Michele.

On Wed, Oct 1, 2008 at 10:52 AM, Michele C. [email protected]
wrote:

Il problema non è l’invio dei file ma come posso “serializzare” il
documento excel senza doverlo salvare sul disco.
Attualmente utilizzo send_file, ma vorrei non salvare il file e inviare
i dati tramite send_data.

come crei il file excel ?

m.

Prova FasterCSV
http://fastercsv.rubyforge.org/

Ciao.

–Tommaso

2008/10/1 Michele C. [email protected]:

Purtroppo non mi basta generare un file csv in quanto ho enne fogli in
un unico file.

Creo workbook e sheet, valorizzo i dati nelle celle prima di salvare il
file.
Dimmi se è una soluzione:
elaboro il file xls
salvo il file
mi apro il file con File.open nomefile, “rb”
il file me lo importo in una variabile
infine invio la variabile con send_data

Ciao Michele.

2008/10/1 Michele C. [email protected]:

un esempio di come uso la classe.

da qui<<

L’anno passato winole non permetteva di maneggiare i dati di excel se
non salvandoli su disco, non so se hanno agiornato le API recentemente.
In rails puoi creare un file temporaneo e cancellarlo dopo l’invio con
un
around filter

michele

Mi rispondo da solo : si, funziona.

Ciao Michele.

Michele C. wrote:

Mi rispondo da solo : si, funziona.

Ciao Michele.

Per non lasciare nulla al caso ho aggiunto un metodo alla classe
“elabxls”
def serializedata
outdata = ‘’
File.open(@nome_file, “rb”) do |fileXls|
while !fileXls.eof
outdata += fileXls.read(4096)
end
end
return outdata
end

La si deve chiamare alla fine del ciclo di “elabora”
Ovviamente nel ciclo elabora deve esserci il salvataggio del file.

Ciao Michele.