wie kann ich Textdateien (ca. 8000) am einfachsten von UTF-8 nach Ansi konvertieren?
Geht das evtl. per VBA ?
Vielen Dank im Voraus !
Liebe Grüße
Selma
Option Explicit
Private Declare Function WideCharToMultiByte Lib "kernel32.dll" ( _
ByVal CodePage As Long, _
ByVal dwFlags As Long, _
ByVal lpWideCharStr As Long, _
ByVal cchWideChar As Long, _
ByVal lpMultiByteStr As Long, _
ByVal cbMultiByte As Long, _
ByVal lpDefaultChar As Long, _
ByVal lpUsedDefaultChar As Long) As Long
Private Declare Function MultiByteToWideChar Lib "kernel32.dll" ( _
ByVal CodePage As Long, _
ByVal dwFlags As Long, _
ByVal lpMultiByteStr As Long, _
ByVal cbMultiByte As Long, _
ByVal lpWideCharStr As Long, _
ByVal cchWideChar As Long) As Long
Private Const CP_UTF8 As Long = 65001
Private Function ConvertToUTF8(ByRef Source As String) As Byte()
Dim Length As Long
Dim Pointer As Long
Dim Size As Long
Dim Buffer() As Byte
Length = Len(Source)
Pointer = StrPtr(Source)
Size = WideCharToMultiByte(CP_UTF8, 0, Pointer, Length, 0, 0, 0, 0)
ReDim Buffer(0 To Size - 1)
WideCharToMultiByte CP_UTF8, 0, Pointer, Length, VarPtr(Buffer(0)), _
Size, 0, 0
ConvertToUTF8 = Buffer
End Function
Private Function ConvertFromUTF8(ByRef Source() As Byte) As String
Dim Size As Long
Dim Pointer As Long
Dim Length As Long
Dim Buffer As String
Size = UBound(Source) - LBound(Source) + 1
Pointer = VarPtr(Source(LBound(Source)))
Length = MultiByteToWideChar(CP_UTF8, 0, Pointer, Size, 0, 0)
Buffer = Space$(Length)
MultiByteToWideChar CP_UTF8, 0, Pointer, Size, StrPtr(Buffer), Length
ConvertFromUTF8 = Buffer
End Function
Public Sub Test_der_Functions()
Dim Eingabe As String: Eingabe = "ändern möchte man es müssen"
Dim Ausgabe As Variant
Dim sText As String
Dim iIndx As Integer
Dim sTmp() As Byte
Ausgabe = ConvertToUTF8(Eingabe) ' den Text in UTF8 konvertieren
For iIndx = 0 To UBound(Ausgabe)
sText = sText & Ausgabe(iIndx) & Chr(9) & Chr(Ausgabe(iIndx)) & Chr(10)
ReDim Preserve sTmp(iIndx)
sTmp(iIndx) = Ausgabe(iIndx) ' den konvertierten Text in ein Array speichern
Next iIndx
MsgBox sText ' den konvertierten Text anzeigen
Eingabe = ConvertFromUTF8(sTmp) ' das Array wieder zurückkonvertieren
MsgBox Eingabe ' das zurückkonvertierte Array anzeigen
End Sub
Um eine Textdatei von UTF-8 in Ansi umzuwandeln, kannst Du VBA verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:
Öffne Excel und drücke ALT + F11
, um den VBA-Editor zu öffnen.
Füge ein neues Modul hinzu, indem Du im Menü auf Einfügen
> Modul
klickst.
Kopiere den folgenden Code in das Modul:
Option Explicit
Private Declare Function WideCharToMultiByte Lib "kernel32.dll" ( _
ByVal CodePage As Long, _
ByVal dwFlags As Long, _
ByVal lpWideCharStr As Long, _
ByVal cchWideChar As Long, _
ByVal lpMultiByteStr As Long, _
ByVal cbMultiByte As Long, _
ByVal lpDefaultChar As Long, _
ByRef lpUsedDefaultChar As Long) As Long
Private Declare Function MultiByteToWideChar Lib "kernel32.dll" ( _
ByVal CodePage As Long, _
ByVal dwFlags As Long, _
ByVal lpMultiByteStr As Long, _
ByVal cbMultiByte As Long, _
ByVal lpWideCharStr As Long, _
ByVal cchWideChar As Long) As Long
Private Const CP_UTF8 As Long = 65001
Private Function ConvertToUTF8(ByRef Source As String) As Byte()
Dim Length As Long
Dim Pointer As Long
Dim Size As Long
Dim Buffer() As Byte
Length = Len(Source)
Pointer = StrPtr(Source)
Size = WideCharToMultiByte(CP_UTF8, 0, Pointer, Length, 0, 0, 0, 0)
ReDim Buffer(0 To Size - 1)
WideCharToMultiByte CP_UTF8, 0, Pointer, Length, VarPtr(Buffer(0)), Size, 0, 0
ConvertToUTF8 = Buffer
End Function
Private Function ConvertFromUTF8(ByRef Source() As Byte) As String
Dim Size As Long
Dim Pointer As Long
Dim Length As Long
Dim Buffer As String
Size = UBound(Source) - LBound(Source) + 1
Pointer = VarPtr(Source(LBound(Source)))
Length = MultiByteToWideChar(CP_UTF8, 0, Pointer, Size, 0, 0)
Buffer = Space$(Length)
MultiByteToWideChar CP_UTF8, 0, Pointer, Size, StrPtr(Buffer), Length
ConvertFromUTF8 = Buffer
End Function
Public Sub Test_der_Functions()
Dim Eingabe As String: Eingabe = "Text für die Konvertierung"
Dim Ausgabe As Variant
Dim sText As String
Dim iIndx As Integer
Dim sTmp() As Byte
Ausgabe = ConvertToUTF8(Eingabe)
For iIndx = 0 To UBound(Ausgabe)
sText = sText & Ausgabe(iIndx) & Chr(9) & Chr(Ausgabe(iIndx)) & Chr(10)
ReDim Preserve sTmp(iIndx)
sTmp(iIndx) = Ausgabe(iIndx)
Next iIndx
MsgBox sText
End Sub
Führe das Makro aus, indem Du F5
drückst oder das Makro über das Menü startest.
Teste die Ausgabe im Nachrichtenfeld.
So kannst Du eine „ansi datei“ mit VBA erstellen und den Text in Excel verwenden.
Fehler: Unvollständige Dateien
Wenn Du feststellst, dass einige Dateien nach der Konvertierung unvollständig sind, überprüfe die ursprüngliche UTF-8 Datei. Manchmal sind die Dateien bereits vor der Konvertierung nicht vollständig.
Fehler: Falsches Format
Stelle sicher, dass die Eingabedatei das richtige UTF-8 Format hat. Andernfalls kann es zu Problemen bei der Umwandlung kommen.
Eine weitere Möglichkeit, eine Textdatei von UTF-8 in Ansi umzuwandeln, ist die Verwendung der Kommandozeile mit ICONV. Hier ist ein Beispielbefehl:
iconv -f utf-8 -t windows-1252 utf8.txt > ansi.txt
Diese Methode ist einfach und effizient, wenn Du viele Dateien auf einmal konvertieren möchtest.
1. Wie kann ich eine ANSI Datei in Excel umwandeln?
Du kannst eine ANSI Datei einfach in Excel importieren, indem Du Daten
> Daten abrufen
> Aus Datei
wählst und dann die Datei auswählst.
2. Ist es möglich, eine ANSI Datei wieder in UTF-8 zu konvertieren?
Ja, Du kannst eine ANSI Datei in UTF-8 umwandeln, indem Du die umgekehrte Konvertierung mit den oben genannten Methoden vornimmst oder ein Tool wie ICONV verwendest.
3. Welche Excel-Version benötige ich für die VBA-Methoden?
Die beschriebenen VBA-Methoden sind in den meisten modernen Excel-Versionen verfügbar, einschließlich Excel 2010 und neuer.
Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden
Suche nach den besten AntwortenEntdecke unsere meistgeklickten Beiträge in der Google Suche
Top 100 Threads jetzt ansehen