Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 1.0/1.1
Excel Character Codes
mercoledì 02 luglio 2003 - 15.20
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
motodriver2002
Profilo
| Newbie
42
messaggi | Data Invio:
mer 2 lug 2003 - 15:20
Salve a tutti,
Ho un applicazione che crea un file excel con dei dati recuperati da un DataBase.
Il problema nasce quando nel DB ci sono caratteri speciali come 'à' che nel file excel creato li trovo scritti così: 'Ã'.
Nella tabella dei codici ascii il carattere 'à' euqivale a 130 mentre in Excel lo stesso carattere è decodificato con il codice 224.
Mi viene quindi in mente che excel utilizzi una tabella di decodifica dei caratteri diversa dalla classica tabella Ascii.
E` così?
Che tabella utilizza?
Come faccio a scrivere i caratteri corretti?
Per creare questo documento Excel non faccio altro che creare un normalissimo file di testo con i valori separati dal carattere chr(9) come nell'esempio seguente:
"A1" & CHR(9) & "A2" & CHR(9) & CHR(13) & "B1" & CHR(9) & "B2"
e lo salvo con estensione .xls
Se apro il file con Notepad i caratteri sono scritti in modo corretto.
Se lo apro con Excel invece non va bene.
Attendo speranzoso.
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
mer 2 lug 2003 - 18:23
Ciao,
bel problema, è tutto il giorno che sto cercando un po' in giro.
Senti allora cominciamo a fare delle considerazioni.
.NET di solito tratta tutto come Unicode. Quindi immagino che il file che hai costruito con estensione Excel sia in Unicode e non in ASCII per esempio.
Quindi prima cosa, ti consiglio magari di provare a cambiare l'Encoding del File che stai andando a scrivere. Nel namespace System.Text.Encoding troverai diversa documentazione applicabile ai TextWriter e TextReader.
Puoi fare una prova, apri con il Blocco Note il file Excel che hai creato, poi vai su Salva con nome, vedrai che in basso ci sarà scritto Codifica e a fianco vedrai con che codifica è stato salvato così almeno lì hai un'informazione sicura da cui puoi partire.
Queste sono alcune considerazioni che potrebbero portarti alla soluzione del problema.
Quello che però ti consiglio è di usare le PIAs di Office sai cosa sono?
In questo modo puoi operare con Excel tramite la sua gerarchia di classi, quella che si usa anche quando si programma in VBA e quindi fare ciò che vuoi con la massima flessibilità. Il metodo che usi e buono ma non il migliore, quindi valuterei la possibilità di PIA. Cosa ne pensi?
Ciao
David De Giacomi
motodriver2002
Profilo
| Newbie
42
messaggi | Data Invio:
gio 3 lug 2003 - 12:50
Ho fatto alcune prova ma non riesco proprio a risolvere il problema.
Di seguito ho scritto il codice della pagina che crea il file Excel.
Come faccio a cambiare l'Encoding del file che sto scrivendo in modo che scriva in UnicodeEncoding invece che in UTF8Encoding?
<% @ Page Language="vb" Debug="true" aspcompat="true" %>
<HTML>
<HEAD>
<title>WebForm1</title>
<% @import Namespace="System.IO" %>
<script runat=server language=vb>
Private sub Page_Load(obj as object, e as EventArgs)
txtTesto.text = "àòèìéù"
end sub
private sub ScriviFile(sender As Object, e As System.EventArgs)
dim objWriter as new StreamWriter("c:\prova.xls")
objWriter.Write(objWriter.Encoding)
objWriter.Write(chr(13))
objWriter.Write(txtTesto.text)
objWriter.Close
end sub
</script>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<asp:TextBox Runat=server ID=txtTesto Width=30%></asp:TextBox>
<br>
<asp:Button Runat=server ID=btnAvvio Text=Avvio OnClick=ScriviFile></asp:Button>
</form>
</body>
</HTML>
Grazie.
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
gio 3 lug 2003 - 14:15
Ciao è sufficiente allora che includi il namespace System.Text tramite:
Imports System.Text
e poi usa queste istruzioni:
Dim testo As String = "àòèìéù"
Dim objWriter As New StreamWriter("C:\prova.xls", False, Encoding.Default)
objWriter.Write(Chr(13))
objWriter.Write(testo)
objWriter.Close()
Vedrai che i caratteri nel file Excel saranno corretti.
Ciao
David De Giacomi
motodriver2002
Profilo
| Newbie
42
messaggi | Data Invio:
gio 3 lug 2003 - 14:30
MITICO!!!!
GRAZIE MILLE!!!
Ora che funziona però ho una domanda.
La definizione Encoding.Default dovrebbe prendere il formato di .NET cioè il UTF8Encoding mentre Excel utilizza l'UnicodeEncoding.
Come mai funziona lo stesso anche con Encoding.Default mentre a rigor di logica dovrei specificare Encoding.Unicode?
Ciao.
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
gio 3 lug 2003 - 14:35
Con il Default scrive con l'Encoding Windows-1252, ma anche se provi ad usare Unicode. Excel lo apre sempre regolarmente con tutti i caratteri accentati. E' solo con l'UTF-8 che non riesce a leggerli.
Chiaramente se scrivi il file in Unicode occuperà il doppio perchè vengono usati 16 bit (2 byte) per ogni carattere invece di uno.
Ciao
David
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !