Excel Character Codes

mercoledì 02 luglio 2003 - 15.20

motodriver2002 Profilo | Newbie

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

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

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

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

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

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
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5