Skip to main content
Announcements
See why Qlik is a Leader in the 2024 Gartner® Magic Quadrant™ for Analytics & BI Platforms. Download Now
cancel
Showing results for 
Search instead for 
Did you mean: 
alexis_garcia
Creator II
Creator II

Macro crea ficheros de texto plano

Hola,

Tengo unas macros que generan unos ficheros en texto plano.

El problema es que me generan los ficheros con codificación UTF-8 y lo que necesito es que sean ANSI.

He probado a cambiar la opción "Juego de caracteres al Exportar" en Propiedades de Documento, pero sigue exportándolos en UTF-8.

Qué podría hacer?

Gracias.

Saludos.

5 Replies
fkeuroglian
Partner - Master
Partner - Master

Alexis como estas?

Espero que este blog de la comunidad te sea util, saludos

Ansi codification

How store txt in ANSI ?

ANSI coding in textfile from macro | Qlik Community

hector_munoz
Specialist
Specialist

Hola Alexis,

Prueba esto a ver si te vale:

SUB WriteFileInANSI

  sFileName = "C:\MyFile.txt"

  Set fsT = CreateObject("ADODB.Stream")

  fsT.Type = 2 'Specify stream type - we want To save text/string data.

  fsT.Charset = "ascii" 'Specify charset For the source text data.

  fsT.Open 'Open the stream And write binary data To the object

  fsT.WriteText "special characters: äöüß"

  fsT.SaveToFile sFileName, 2 'Save binary data To disk

END SUB

Un saludo,

H

alexis_garcia
Creator II
Creator II
Author

Muchas gracias a los dos.

Ya he probado muchas posibles soluciones, tanto cambiando configuraciones del documento y usuario como en las propias macros, pero sigue creando los ficheros en UTF-8.

Leí un post externo que decía que Qlikview solo es capaz de crear ficheros con codificación UTF-8. Es cierto?

Alguien ha podido crear algún fichero con otra codificación diferente a UTF-8?

Gracias.

Saludos.

hector_munoz
Specialist
Specialist

Hola Alexis,

He hecho la prueba y a mí me funciona bien... Tengo 2 rutinas, una que me crea un fichero en ANSII (WriteFileInANSI) y otra que me crea un fichero en UTF-8 (WriteFileInUTF8):

SUB WriteFileInANSI

  sFileName = "C:\HCTR\PROYECTOS\ENERGYA_VM\__POC_ENERGYA\DAT\MiArchivoANSI.txt"

  Set fsT = CreateObject("ADODB.Stream")

  fsT.Type = 2 'Specify stream type - we want To save text/string data.

  fsT.Charset = "ascii" 'Specify charset For the source text data.

  fsT.Open 'Open the stream And write binary data To the object

  fsT.WriteText "special characters: äöüß"

  fsT.SaveToFile sFileName, 2 'Save binary data To disk

END SUB

SUB WriteFileInUTF8

  sFileName = "C:\HCTR\PROYECTOS\ENERGYA_VM\__POC_ENERGYA\DAT\MiArchivoUTF8.txt"

  Set fsT = CreateObject("ADODB.Stream")

  fsT.Type = 2 'Specify stream type - we want To save text/string data.

  fsT.Charset = "utf-8" 'Specify charset For the source text data.

  fsT.Open 'Open the stream And write binary data To the object

  fsT.WriteText "special characters: äöüß"

  fsT.SaveToFile sFileName, 2 'Save binary data To disk

END SUB

Al ejecutarlas se crean los 2 ficheros: MiArchivoANSI.txt y MiArchivoUTF8.txt, con una serie de caracteres dentro que en ANSI se escriben (o interpretan) tal cual y en UTF-8 no: "special characters: äöüß".

Si abro los ficheros con un editor de texto avanzado sí que sabe en qué formato se han guardado:

MiArchivoANSI.txt

23-06-2017 14-40-32.png

MiArchivoUTF8.txt

23-06-2017 14-40-53.png

¡Espero que te ayude!

Saludos,

H

el_aprendiz111
Specialist
Specialist

Alexis

mira la Macro

hay que declarar 3 variables:

Public Sub ConvertInterFaceFileUTF8toANSI()
Dim StrText
Dim adReadAll
Dim adSaveCreateOverWrite
Dim adTypeBinary
Dim adTypeText
Dim adWriteChar
Dim DestDir
Dim UTF8FName
Dim ANSIFName
DestDir   = ActiveDocument.GetVariable("vInterfaceFileDirectory").getcontent.string
UTF8FName = ActiveDocument.GetVariable("vInterFaceUTF8FileName").getcontent.string
ANSIFName = ActiveDocument.GetVariable("vInterfaceFileName").getcontent.string

adReadAll = -1
adSaveCreateOverWrite = 2
adTypeBinary = 1
adTypeText = 2
adWriteChar = 0
'//Set TextStream = CreateObject("ADODB.Stream")
With CreateObject("ADODB.Stream")
.Open
.Type = adTypeBinary
.LoadFromFile DestDir & UTF8FName
.Type = adTypeText
.Charset = "utf-8"
strText = .ReadText(adReadAll)
.Position = 0
.SetEOS
.Charset = "_autodetect" 'Use current ANSI codepage.
.
WriteText strText, adWriteChar
.SaveToFile DestDir & ANSIFName, adSaveCreateOverWrite
.Close
End With

End sub


Saludos,