Discussione:
Salvare una TABLE in Javascript
(troppo vecchio per rispondere)
Amedeo Storni
2006-01-30 14:37:29 UTC
Permalink
Salve a tutti, sono parecchio niubbo del javascript, quindi perdonatemi se
faccio una domanda assurda.
Ho parecchie pagine HTML, e ciascuna contiene una tabella (<TABLE>) e poco
altro.
Vorrei aggiungere a questa pagina la possibilita' di salvare i dati della
tabella in formato CSV.
Ho pensato a questo: lo script e' attivato da un submit button, e quando
viene premuto, lo script va a leggere uno per uno i campi della <TABLE>, li
memorizza temporaneamente in un array, e rimpiazza tutto il contenuto del
file HTML con il contenuto del file CSV. A quel punto l'utente, ben
istruito, puo' salvare il file con nome pippo.csv, ed ecco fatto un export
to Excel in maniera semplice e veloce.
Importante: lo script deve essere sempre lo stesso, non posso riadattarlo
per ogni singola pagina.
Ecco le mie domande:

1) E' possibile farlo?
2) Se e' possibile, esiste gia' qualcosa di pronto che ottiene un simile
risultato?
3) Avete metodi migliori per ottenere questo risultato_

Grayie in anticipo
Amedeo
Cristiano Larghi
2006-01-30 14:44:42 UTC
Permalink
Post by Amedeo Storni
Salve a tutti, sono parecchio niubbo del javascript, quindi perdonatemi se
faccio una domanda assurda.
Ho parecchie pagine HTML, e ciascuna contiene una tabella (<TABLE>) e poco
altro.
Vorrei aggiungere a questa pagina la possibilita' di salvare i dati della
tabella in formato CSV.
[CUT]
devi farlo server-side, non puoi farlo solo client-side. Poi la strada che
indichi può andar bene (io per la intranet prendo l'intera tabella, la
sparo via xmlhttp al server che mi crea un bel file xls temporaneo, poi dal
client chiamo tale file e compare un bel salva-apri).
--
"Voi abili a tenere sempre un piede qua e uno là
avrete un avvenire certo in questo mondo qua
però la dignità
dove l'avete persa?"
V.R.
ZER0
2006-01-30 14:47:49 UTC
Permalink
Post by Amedeo Storni
Ho pensato a questo: lo script e' attivato da un submit button, e quando
viene premuto, lo script va a leggere uno per uno i campi della <TABLE>, li
memorizza temporaneamente in un array, e rimpiazza tutto il contenuto del
file HTML con il contenuto del file CSV. A quel punto l'utente, ben
istruito, puo' salvare il file con nome pippo.csv, ed ecco fatto un export
to Excel in maniera semplice e veloce.
Se hai modo di utilizzare una QUALUNQUE tecnologia server side (ASP, JSP, PHP,
CGI in generis) fai un export in excel in maniera ancora più semplice e
veloce... Basta modificare il content-type della risposta del server e
aggiungere un header, quando richiami la pagina con la tabella.

Il content type è:

application/vnd.ms-excel

l'header:

content-disposition

con valore:

inline; filename=nomeFileExcel.xls
Post by Amedeo Storni
1) E' possibile farlo?
Si. E' preferibile la soluzione server ovviamente, ma se per un qualche motivo
non avessi tecnologie server side a tua disposizione puoi benissimo fare in JS
quello che hai supposto.
Post by Amedeo Storni
2) Se e' possibile, esiste gia' qualcosa di pronto che ottiene un simile
risultato?
Non saprei, mai avuto bisogno; appunto perché solitamente è un lavoro che si
fa server-side. Magari cercando su google scappa fuori qualcosa, comunque.

In ogni caso, non sarebbe uno script complesso.
Post by Amedeo Storni
3) Avete metodi migliori per ottenere questo risultato_
Leggi su.
--
- Voi chi dovreste essere? Una specie di cosmonauti?
- No disinfestatori, hanno visto uno scarafaggio al 12°
- Deve essere grosso questo scarafaggio
- Enorme, stacca le teste a morsi!
Cristiano Larghi
2006-01-30 15:01:15 UTC
Permalink
Post by ZER0
Se hai modo di utilizzare una QUALUNQUE tecnologia server side (ASP, JSP, PHP,
CGI in generis) fai un export in excel in maniera ancora più semplice e
veloce... Basta modificare il content-type della risposta del server e
aggiungere un header, quando richiami la pagina con la tabella.
application/vnd.ms-excel
content-disposition
inline; filename=nomeFileExcel.xls
eh, acciderbola ... io ho avuto problemi con iis e c#, apriva 1 volta sì e
una no (dipende dalle versioni di IE e patch installate). Ho risolto con
attachment anziché inline (ma anche così non funzionava perfettamente), ho
risolto settando prima un ClearHeaders (che non dovrebbe servire, ma senza
aveva un comportamento random). in rete avevo trovato in giro questi
problemi, anche se non ben documentati.

inoltre in questo modo interpreta un po' come vuole le colonne; esempio:
codice cliente 16.12345 diventa un numero assurdo ... io ho dovuto creare
un wrapper e un file ini (xml) per indicare che tipo di colonne erano (nel
caso di codice cliente occorre forzare come "Text"), il formato etc (poi
già che c'ero ho fatto lo sborone e ho messo altre amenità tipo
allineamento, colore etc).
--
"e mai che mi sia venuto in mente
di essere più ubriaco di voi
di essere molto più ubriaco di voi"
F.D.A.
ZER0
2006-01-30 15:11:06 UTC
Permalink
On Mon, 30 Jan 2006 16:01:15 +0100, Cristiano Larghi wrote:

[cut]
Post by Cristiano Larghi
eh, acciderbola ... io ho avuto problemi con iis e c#, apriva 1 volta sì e
una no (dipende dalle versioni di IE e patch installate).
Mai avuto problemi; ma è anche vero che non utilizzo C#.
Post by Cristiano Larghi
risolto settando prima un ClearHeaders (che non dovrebbe servire, ma senza
aveva un comportamento random).
Certo, la risposta va sempre "ripulita" per sicurezza prima di inviare
qualsiasi cosa. Non ho scritto codice perché non so quale linguaggio
server-side ha a disposizione (soprattutto se ne ha uno a disposizione).
Post by Cristiano Larghi
codice cliente 16.12345 diventa un numero assurdo ...
Anche questo è normale. E non solo, dipende anche dalla versione di Excel
installata e dalla localizzazione della stessa. Cambiano infatti i separatori
dei decimali e migliaia.
Post by Cristiano Larghi
io ho dovuto creare
un wrapper e un file ini (xml) per indicare che tipo di colonne erano (nel
caso di codice cliente occorre forzare come "Text"), il formato etc (poi
già che c'ero ho fatto lo sborone e ho messo altre amenità tipo
allineamento, colore etc).
Io ho risolto questo genere di cose tramite i CSS, niente wrapper o altro.
--
- Egon, questo mi ricorda quando tentasti di trapanarti il cranio.
- Mi saebbe riuscito se non mi avessi fermato.
Cristiano Larghi
2006-01-30 15:14:18 UTC
Permalink
Post by ZER0
Mai avuto problemi; ma è anche vero che non utilizzo C#.
Anch'io con asp classico non ho mai avuto problemi
Post by ZER0
Post by Cristiano Larghi
codice cliente 16.12345 diventa un numero assurdo ...
Anche questo è normale. E non solo, dipende anche dalla versione di Excel
installata e dalla localizzazione della stessa. Cambiano infatti i separatori
dei decimali e migliaia.
Eggià
Post by ZER0
Post by Cristiano Larghi
io ho dovuto creare
un wrapper e un file ini (xml) per indicare che tipo di colonne erano (nel
caso di codice cliente occorre forzare come "Text"), il formato etc (poi
già che c'ero ho fatto lo sborone e ho messo altre amenità tipo
allineamento, colore etc).
Io ho risolto questo genere di cose tramite i CSS, niente wrapper o altro.
Mettendo i namespace di excel, tipo ... non ricordo a memoria, quelle
cosacce @mso-number-format o simili? così, per curiosità (anch'io avevo
fatto così, poi dovevo passare anche in pdf e così alla fin fine ho fatto
un wrapper unico per tutti i formati).
--
"Affacciati affacciati benedici, guardaci
guardaci...guardaci!
Tanto sono quasi duemila anni che stai a guardare!"
E.B.
ZER0
2006-01-30 15:23:40 UTC
Permalink
Post by Cristiano Larghi
Post by ZER0
Mai avuto problemi; ma è anche vero che non utilizzo C#.
Anch'io con asp classico non ho mai avuto problemi
Non solo con ASP, ma anche con PHP, JSP, Domino... Può darsi che .NET tanto
per cambiare aggiunga cose non desiderate, in tutta autonomia.
Post by Cristiano Larghi
Post by ZER0
Post by Cristiano Larghi
io ho dovuto creare
un wrapper e un file ini (xml) per indicare che tipo di colonne erano (nel
caso di codice cliente occorre forzare come "Text"), il formato etc (poi
già che c'ero ho fatto lo sborone e ho messo altre amenità tipo
allineamento, colore etc).
Io ho risolto questo genere di cose tramite i CSS, niente wrapper o altro.
Mettendo i namespace di excel, tipo ...
Per quanto mi riguarda, non ho dovuto mettere namespace o altro, solo un paio
di rule per quanto riguarda il tag table.
Post by Cristiano Larghi
non ricordo a memoria, quelle
Qualcosa di simile, ma sono cosacce: Se devi scrivere un file in un formato, è
giusto approfondire come tale formato funzioni.
Inoltre ti permettono di mantenere un unico codice, eviti di salvare file
temporanei sul server et similia.

Tra l'altro non hai bisogno di XmlHttpRequest o altro.
Post by Cristiano Larghi
così, per curiosità (anch'io avevo
fatto così, poi dovevo passare anche in pdf
Ma l'OP parlava di Excel.
Post by Cristiano Larghi
e così alla fin fine ho fatto un wrapper unico per tutti i formati).
E per Excel non ti conveniva comunque mantenere una struttura semplice?
--
- Egon, questo mi ricorda quando tentasti di trapanarti il cranio.
- Mi saebbe riuscito se non mi avessi fermato.
Loading...