CSV zu TXT automatisiert mit Access
Moin,
hab ein etwas komplizierteres Problem:
Ich habe eine CSV Datei vorliegen mit Kontaktdaten. Hier stehen alle Informationen über bestimmte Mitarbeiter drin, von denen aber nur ein paar benötigt werden. Alle Attribute sind mit Semikolons getrennt. Wenn ich nun Access 2007 öffne und hier auf "öffnen" klicke und die CSV Datei auswähle, muss ich ihm in diesem Assistenten sagen, dass alle Spalten mit Semikolons getrennt sind und Access ordnet mir die Attribute in die richtigen Spalten. Insgesamt sind das 19 Stück. Von diesen 19 Spalten benötige ich aber nur 4 Stück. Also wähle ich nur die 4 Stück aus die ich benötige und fertig. Wenn ich jetzt manuell auf Export klicke und wähle aus, dass er mir diese 4 Spalten in eine txt Datei exportieren soll, kann ich ihm in diesem Export Assistenten sagen, dass ich die verschiedenen Spalten wieder mit Semikolons getrennt haben möchte. Export funktioniert.
Als Beispiel hier mal ein Datensatz aus der CSV:
Nachname;Vorname;Status;Vollständiger Name;E-Mail gesch;Telefon Gesch; Telefon privat;E-Mail Privat;Geschlecht;Geburtsdatum; usw usw usw...
Jetzt wollte ich das ganze automatisch ablaufen lassen...
Hierzu habe ich in Access ein Modul erstellt, das wie folgt aussieht:
Function autoexec()
On Error GoTo autoexec_Err
DoCmd.SetWarnings (Warningsoff)
DoCmd.TransferText acExportDelim, , "Kontakte", "C:\test.txt", True
autoexec_Exit:
Exit Function
autoexec_Err:
MsgBox Error$
Resume autoexec_Exit
End Function
Soweit so gut...
Jetzt habe ich ein Makro gebaut indem die Funktion autoexec ausgeführt wird...
Wenn ich das Makro starte, startet bekomme ich nun folgende Fehlermeldung: "Das Feldtrennzeichen für die angegebene Textdatei entspricht dem Dezimaltrennzeichen oder Texttrennzeichen"
Wenn ich nun meinen oben genannten Code nicht mit Semikolon sondern mit TABS exportieren lasse funktioniert es.. ich benötige aber Semikolons...
Weiß hier jemand Rat??
Vielen Dank
Gruß Stelli
hab ein etwas komplizierteres Problem:
Ich habe eine CSV Datei vorliegen mit Kontaktdaten. Hier stehen alle Informationen über bestimmte Mitarbeiter drin, von denen aber nur ein paar benötigt werden. Alle Attribute sind mit Semikolons getrennt. Wenn ich nun Access 2007 öffne und hier auf "öffnen" klicke und die CSV Datei auswähle, muss ich ihm in diesem Assistenten sagen, dass alle Spalten mit Semikolons getrennt sind und Access ordnet mir die Attribute in die richtigen Spalten. Insgesamt sind das 19 Stück. Von diesen 19 Spalten benötige ich aber nur 4 Stück. Also wähle ich nur die 4 Stück aus die ich benötige und fertig. Wenn ich jetzt manuell auf Export klicke und wähle aus, dass er mir diese 4 Spalten in eine txt Datei exportieren soll, kann ich ihm in diesem Export Assistenten sagen, dass ich die verschiedenen Spalten wieder mit Semikolons getrennt haben möchte. Export funktioniert.
Als Beispiel hier mal ein Datensatz aus der CSV:
Nachname;Vorname;Status;Vollständiger Name;E-Mail gesch;Telefon Gesch; Telefon privat;E-Mail Privat;Geschlecht;Geburtsdatum; usw usw usw...
Jetzt wollte ich das ganze automatisch ablaufen lassen...
Hierzu habe ich in Access ein Modul erstellt, das wie folgt aussieht:
Function autoexec()
On Error GoTo autoexec_Err
DoCmd.SetWarnings (Warningsoff)
DoCmd.TransferText acExportDelim, , "Kontakte", "C:\test.txt", True
autoexec_Exit:
Exit Function
autoexec_Err:
MsgBox Error$
Resume autoexec_Exit
End Function
Soweit so gut...
Jetzt habe ich ein Makro gebaut indem die Funktion autoexec ausgeführt wird...
Wenn ich das Makro starte, startet bekomme ich nun folgende Fehlermeldung: "Das Feldtrennzeichen für die angegebene Textdatei entspricht dem Dezimaltrennzeichen oder Texttrennzeichen"
Wenn ich nun meinen oben genannten Code nicht mit Semikolon sondern mit TABS exportieren lasse funktioniert es.. ich benötige aber Semikolons...
Weiß hier jemand Rat??
Vielen Dank
Gruß Stelli
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 160573
Url: https://administrator.de/contentid/160573
Ausgedruckt am: 26.11.2024 um 02:11 Uhr
7 Kommentare
Neuester Kommentar
Hallo Stelli!
Du hast also nur vor, aus der CSV eine TXT zu machen, ohne die Daten in Access zu bearbeiten? Falls ja, würde ich ganz einfach VBS dafür verwenden - ungetestet:
Grüße
bastla
Du hast also nur vor, aus der CSV eine TXT zu machen, ohne die Daten in Access zu bearbeiten? Falls ja, würde ich ganz einfach VBS dafür verwenden - ungetestet:
CSV = D:\Deine Kontaktdaten.csv"
TXT = "D:\test.txt"
Delim = ";"
Set fso = CreateObject("Scripting.FileSystemObject")
Satz = Split(fso.OpenTextFile(CSV).ReadAll, vbCrLf) 'zeilenweise in Array einlesen
Set TXTFile = fso.CreateTextFile(TXT)
For i = 0 To UBound(Satz)
Feld = Split(Satz(i), Delim)
TXTFile.WriteLine Feld(0) & Delim & Feld(1) & Delim & Feld(4) & Delim & Feld(5) 'nur benötigte Felder in die Textdatei schreiben
Next
TXTFile.Close
WScript.Echo Ubound(Satz) + 1 & " Datensätze in """ & TXT & """ geschrieben."
bastla
Hallo Stelli!
getestet sieht mein Ergebnis auch so aus:
Wenn die Leerschritte tatsächlich zwischen allen einzelnen Zeichen auftauchen, könnte ev die CSV im Unicode-Format vorliegen - dann müsstest Du die Zeile 6 (zumindest in meinem Ansatz - bei Dir wird mangels ""-Formatierung ja keine Zeilennummer angezeigt) auf
ändern.
Wenn dann übrigens auch wieder Unicode geschrieben werden soll, wäre noch die Zeile 8 auf
anzupassen ...
Grüße
bastla
mit den falschen Feldern und mit einem Leerschritt zwischen jedem Buchstaben und Zeichen.
"Falsche" Felder erhöltst Du, wenn Du vermutlich nicht die Feldnummer ab 0 gezählt hast /siehe mein Beispiel oben) - mitNachname;Vorname;Status;Vollständiger Name;E-Mail gesch;Telefon Gesch; Telefon privat;E-Mail Privat;Geschlecht;Geburtsdatum; usw usw usw...
Nachname2;Vorname2;Status2;Vollständiger Name2;E-Mail gesch2;;;E-Mail Privat2;Geschlecht2;Geburtsdatum2; usw usw usw...
Vorname;Status;E-Mail Privat;Geburtsdatum
Vorname2;Status2;E-Mail Privat2;Geburtsdatum2
Satz = Split(fso.OpenTextFile(CSV, 1, False, True).ReadAll, vbCrLf) 'zeilenweise in Array einlesen
Wenn dann übrigens auch wieder Unicode geschrieben werden soll, wäre noch die Zeile 8 auf
Set TXTFile = fso.CreateTextFile(TXT, True, True)
Grüße
bastla
Hallo Stelli!
Magst Du noch mehr über diese mehreren CSV-Dateien erzählen (wie etwa, wo/wie sie zu finden wären)?
Es gäbe übrigens eine ganz einfache Methode, alle Dateien eines Ordners mit einem CMD-Befehl zusammenzufassen (um dann stattdessen die Ergebnisdatei weiterzubearbeiten):
Voraussetzung wäre hierfür nur, dass die jeweils letzte Zeile mit einer Zeilenschaltung endet.
Grüße
bastla
Magst Du noch mehr über diese mehreren CSV-Dateien erzählen (wie etwa, wo/wie sie zu finden wären)?
Es gäbe übrigens eine ganz einfache Methode, alle Dateien eines Ordners mit einem CMD-Befehl zusammenzufassen (um dann stattdessen die Ergebnisdatei weiterzubearbeiten):
type D:\*.csv>D:\AlleKontakte.txt
Grüße
bastla
Hallo Stelli!
Wenn Du die Pfade kennst, ist das ja weiter kein Problem:
Voraussetzung dafür ist natürlich, dass der Satzaufbau in allen Einzeldateien gleich ist ...
Grüße
bastla
Wenn Du die Pfade kennst, ist das ja weiter kein Problem:
AlleCSV = Array("D:\Kontkate.csv", "D:\Unterordner\Kontaktdaten2.csv", "D:\Textordner\Kontakt.txt")
TXT = "D:\test.txt"
Delim = ";"
Set fso = CreateObject("Scripting.FileSystemObject")
Set TXTFile = fso.CreateTextFile(TXT)
For Each CSV In AlleCSV
Satz = Split(fso.OpenTextFile(CSV).ReadAll, vbCrLf) 'zeilenweise in Array einlesen
Satzanzahl = Satzanzahl + UBound(Satz) + 1
For i = 0 To UBound(Satz)
Feld = Split(Satz(i), Delim)
TXTFile.WriteLine Feld(1) & Delim & Feld(2) & Delim & Feld(7) & Delim & Feld(9)
Next
Next
TXTFile.Close
WScript.Echo Satzanzahl & " Datensätze in """ & TXT & """ geschrieben."
Grüße
bastla