Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
992to996
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
992to996
992to996
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Wie Excel-File inkl. Russisch mit Makro speichern?

Wie Excel-File inkl. Russisch mit Makro speichern?
18.07.2008 21:14:00
Volker
Ich benutze aktuell folgendes Makro, um ein Excel-File als TXT-File zu speichern (wobei ich | als Trennzeichen wähle):

Sub SaveCSV()
' Speichert den Inhalt eines Arbeitsblatts als CSV-Datei
' mit wählbarem Trennzeichen und Maskierung von Einträgen
Dim Bereich As Object, Zeile As Object, Zelle As Object
Dim strTemp As String
Dim strDateiname As String
Dim strTrennzeichen As String
Dim strMappenpfad As String
strMappenpfad = ActiveWorkbook.FullName
strMappenpfad = Replace(strMappenpfad, ".xls", ".csv")
strDateiname = InputBox("Wie soll die CSV-Datei heißen (inkl. Pfad)?", "CSV-Export",  _
strMappenpfad)
If strDateiname = "" Then Exit Sub
strTrennzeichen = InputBox("Welches Trennzeichen soll verwendet werden?", "CSV-Export", ",")
If strTrennzeichen = "" Then Exit Sub
Set Bereich = ActiveSheet.UsedRange
Open strDateiname For Output As #1
For Each Zeile In Bereich.Rows
For Each Zelle In Zeile.Cells
If InStr(1, Zelle.Text, strTrennzeichen) > 0 Then
'Zellen, die ein Trennzeichen beinhalten in Anführungsstriche setzen
strTemp = strTemp & """" & CStr(Zelle.Value) & """" & strTrennzeichen
Else
strTemp = strTemp & CStr(Zelle.Value) & strTrennzeichen
End If
Next
If Right(strTemp, 1) = strTrennzeichen Then strTemp = Left(strTemp, Len(strTemp) - 1)
Print #1, strTemp
strTemp = ""
Next
Close #1
Set Bereich = Nothing
MsgBox "Datei wurde exportiert nach" & vbCrLf & strDateiname
End Sub


Das Ganze hat bisher einwandfrei funktioniert ... was sich jetzt geändert hat, als in einer Spalte russischer Text dazu kam. Das Resultat ist, dass in der Textdatei lauter ? angezeigt werden - was vermutlich an einem Codierungsproblem liegt. Ich gehe davon aus, dass die TXT in ANSI und nicht in Unicode gespeichert wird ...!?
Nun also die Frage: Wie löse ich das? Da die Foren- und Google-Suche bislang eher ernüchternd war ... hat jemand der hier mitlesenden Hilfe für mich ...?

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wie Excel-File inkl. Russisch mit Makro speichern?
19.07.2008 09:09:39
Nepumuk
Hallo Volker,
dann speichere doch einfach in Unicode. Beispiel:
Public Sub Beispiel()
    Dim objFSO, objTextStream
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTextStream = objFSO.OpenTextFile("C:\Test.txt", 2, True, -1)
    objTextStream.Write "ðñòóôõ"
    objTextStream.Close
End Sub

Der dritte Parameter (-1) in der Open-Methode gibt das Dateiformat an.
Gruß
Nepumuk

Anzeige
AW: Wie Excel-File inkl. Russisch mit Makro speichern?
19.07.2008 12:52:00
Volker
Einfach ... na ja. Wären meine VBA-Kenntnisse nicht gar so rudimentär, würd ich das vielleicht auch so sehen ... ;)
Aber gut, mit Deiner Hilfe war es jetzt zumindest relativ einfach. Ich habe mein Makro entsprechend angepasst:

Sub SaveCSVUnicode()
' Speichert den Inhalt eines Arbeitsblatts als CSV-Datei in Unicode-Codierung
' mit wählbarem Trennzeichen und Maskierung von Einträgen
Dim Bereich As Object, Zeile As Object, Zelle As Object
Dim strTemp As String
Dim strDateiname As String
Dim strTrennzeichen As String
Dim strMappenpfad As String
Dim objFSO, objTextStream
strMappenpfad = ActiveWorkbook.FullName
strMappenpfad = Replace(strMappenpfad, ".xls", ".csv")
strDateiname = InputBox("Wie soll die CSV-Datei heißen (inkl. Pfad)?", "CSV-Export",  _
strMappenpfad)
If strDateiname = "" Then Exit Sub
strTrennzeichen = InputBox("Welches Trennzeichen soll verwendet werden?", "CSV-Export", ",")
If strTrennzeichen = "" Then Exit Sub
Set Bereich = ActiveSheet.UsedRange
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextStream = objFSO.OpenTextFile(strDateiname, 2, True, -1)
For Each Zeile In Bereich.Rows
For Each Zelle In Zeile.Cells
If InStr(1, Zelle.Text, strTrennzeichen) > 0 Then
'Zellen, die ein Trennzeichen beinhalten in Anführungsstriche setzen
strTemp = strTemp & """" & CStr(Zelle.Value) & """" & strTrennzeichen
Else
strTemp = strTemp & CStr(Zelle.Value) & strTrennzeichen
End If
Next
If Right(strTemp, 1) = strTrennzeichen Then strTemp = Left(strTemp, Len(strTemp) - 1) & Chr( _
10)
objTextStream.Write strTemp
strTemp = ""
Next
objTextStream.Close
Set Bereich = Nothing
MsgBox "Datei wurde exportiert nach" & vbCrLf & strDateiname
End Sub


Also einfach die Stream-Geschichten raus und - da nun auf einmal alles in eine Zeile geschrieben wurde - an den String noch den Zeilenumbruch ran ("& Chr(10)"). Damit wird die TXT nun angeblich in "UCS-2 little Endian" gespeichert!?
Die russischen Zeichen sind nun auch als solche zu erkennen ... allerdings ergibt sich nun ein anderes Problem: Das PHP-Skript, mit dem ich die TXT in meine MySQL-DB einspielen möchte, mag nicht mehr so wie ich ;) An der Stelle


$query = mysql_query("SELECT * FROM tabelle WHERE merkmal='$string[0]'");
$num_rows = mysql_num_rows($query);


liefert $num_rows nun immer 0 zurück. Frage ich $string[0] ab, so erscheint der Inhalt im Browser. Daraus schließe ich nun, dass es da auch ein Codierungsproblem gibt: $string[0] liegt anders vor, als es in der DB steht!? Dort sollte es UTF-8 sein.
Mein Skript soll abhängig von $num_rows einen neuen Datensatz anlegen (wenn bei 0 folglich noch kein Datensatz vorliegt) oder updaten (wenn $num_rows = 1). Diese Unterscheidung bedingt zunächst aber, dass


if ($data[1] == "e")


zutrifft. Dort steht ein e drin ... doch die if-Abfrage bekommt trotzdem kein TRUE. Was wohl auch irgendwie an der Kodierung liegt!? Wenn ich das Ganze in


if ($data[1] == utf8_encode("e"))


ändere, geht es aber auch nicht.
Was muss ich da also dann noch umcodieren ...?!?

Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige