Saltar al contenido

¿Puedo exportar datos de Excel con UTF-8 sin BOM?

No dejes de compartir nuestros tutoriales y códigos en tus redes, necesitamos de tu ayuda para hacer crecer nuestra comunidad.

Solución:

También tengo el mismo problema: tengo que exportar datos de Excel (Office 2003, VBA6.5) a un archivo codificado en UTF-8. ¡Encontré la respuesta de tu pregunta! Debajo de mi ejemplo, donde también elimino la lista de materiales usando el truco n. ° 2 de la respuesta de boost (¡gracias!). No conseguí que el #1 funcionara y nunca probé el #3.

Sub WriteUTF8WithoutBOM()
    Dim UTFStream As Object
    Set UTFStream = CreateObject("adodb.stream")
    UTFStream.Type = adTypeText
    UTFStream.Mode = adModeReadWrite
    UTFStream.Charset = "UTF-8"
    UTFStream.LineSeparator = adLF
    UTFStream.Open
    UTFStream.WriteText "This is an unicode/UTF-8 test.", adWriteLine
    UTFStream.WriteText "First set of special characters: öäåñüûú€", adWriteLine
    UTFStream.WriteText "Second set of special characters: qwertzuiopõúasdfghjkléáûyxcvbnm|Ä€Í÷×äðÐ[]í³£;?¤>#&@<;>*~¡^¢°²`ÿ´½¨¸0", adWriteLine

    UTFStream.Position = 3 'skip BOM

    Dim BinaryStream As Object
    Set BinaryStream = CreateObject("adodb.stream")
    BinaryStream.Type = adTypeBinary
    BinaryStream.Mode = adModeReadWrite
    BinaryStream.Open

    'Strips BOM (first 3 bytes)
    UTFStream.CopyTo BinaryStream

    'UTFStream.SaveToFile "d:adodb-stream1.txt", adSaveCreateOverWrite
    UTFStream.Flush
    UTFStream.Close

    BinaryStream.SaveToFile "d:adodb-stream2.txt", adSaveCreateOverWrite
    BinaryStream.Flush
    BinaryStream.Close
End Sub

La referencia de ADO Stream Object que utilicé.

Si alguien más tiene problemas con la constante adTypeText, debe incluir “Microsoft ActiveX Data Objects 2.5 Object Library” en Herramientas->Referencias.

Algunas posibilidades:

  1. Coloque el texto en el búfer como UTF-8, Tipo = 2, pero luego configure Tipo = 1 (como binario) y escríbalo. Eso podría convencer a ADODB.Stream de omitir la adición de la lista de materiales.

  2. Cree otro búfer, como tipo binario, y use CopyTo para copiar los datos a ese búfer desde un punto posterior a la lista de materiales.

  3. Lea el archivo nuevamente usando Scripting.FileSystemObject, recorte la lista de materiales, escriba nuevamente

valoraciones y comentarios

Te invitamos a añadir valor a nuestro contenido cooperando tu veteranía en las explicaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *