cement
Goto Top

Access 2007 nach CSV

Ich benötige eine zweizeilige CSV-Datei

Moin Leute,

ich habe mir einen Access 2007 Bericht zusammengestellt, der ungefähr so aussieht:


B 2 SA 24.09.2009 411000
K 52 0912345

B 2 SA 24.09.2009 456500
K 52 0923456

B 2 SA 24.09.2009 478901
K 52 0934567


Wobei die Zeile B und Zeile K jeweils einen Datensatz darstellen.

Soweit so gut.

Nun möchte ich das in irgendeiner Form in eine CSV-Datei exportieren, die Semikolon-getrennt ist und genau das obige Format hat (also mit B-Zeile und K-Zeile).

Ich habe schon alle möglichen Export-Varianten ausprobiert, aber in der CSV stehen B-Zeile und K-Zeile immer in einer Reihe, ungefär so:



B 2 SA 24.09.2009 411000 K 52 0912345

B 2 SA 24.09.2009 456500 K 52 0923456

B 2 SA 24.09.2009 478901 K 52 0934567

Hat jemand wohl eine Idee, wie ich eine zwei-zeilige CSV erstellen kann?
Gerne auch über den Umweg erst in Excel und von dort nach CSV...

Danke, Gruß

CeMeNt

Content-Key: 125726

Url: https://administrator.de/contentid/125726

Printed on: April 26, 2024 at 06:04 o'clock

Mitglied: 76109
76109 Sep 24, 2009 at 15:03:23 (UTC)
Goto Top
Hallo CeMeNt!

Das kann man relativ einfach über Batch oder VB-Script konvertieren. Allerdings bedarf es dazu genauere Angaben.

Was steht jetzt in einer Zeile: Spalte von bis?

Zeile 1 soll sein: Spalte von bis?
Zeile 2 soll sein: Spalte von bis?

Gruß Dieter
Member: CeMeNt
CeMeNt Sep 24, 2009 at 15:45:16 (UTC)
Goto Top
Hallo Dieter,

über VB-Script hatte ich mir das schon fast gedacht. Nur leider fehlen mir dazu die Kenntnisse.
Grundlegende VBA-Kentnisse sind zwar vorhanden, aber das hier übersteigt leider mein Wissen...

Also, die erste Zeile soll aus insgesamt 16 Spalten bestehen,
die zweite enthält dann nur noch vier Spalten (jeweils von Spalte A)

Vermutlich braucht man dann noch die exakten Feldnamen, nicht wahr?
Die werde ich allerdings erst morgen haben, da ich heute nicht mehr dazu kommen werde.

Aber danke schon mal,

Gruß CeMeNt
Mitglied: 76109
76109 Sep 24, 2009 at 15:58:20 (UTC)
Goto Top
Hallo CeMeNt!

OK, an die Feldnamen hatte ich noch garnicht gedacht, aber die werden einfach in einem Array definiert und in Zeile 1 geschrieben.

Gruß Dieter
Mitglied: 76109
76109 Sep 24, 2009 at 17:09:25 (UTC)
Goto Top
Hallo CeMeNt!

Hier mal ein VB-Script (*.vbs) zum testen.

Die Konstanten Path und Feldnamen entsprechend anpassen:
Option Explicit

Const Path = "X:\Test\Test.csv"  

Const F01 = "A"     'Feldnamen  
Const F02 = "B"  
Const F03 = "C"  
Const F04 = "D"  
Const F05 = "E"  
Const F06 = "F"  
Const F07 = "G"  
Const F08 = "H"  
Const F09 = "I"  
Const F10 = "J"  
Const F11 = "K"  
Const F12 = "L"  
Const F13 = "M"  
Const F14 = "N"  
Const F15 = "O"  
Const F16 = "P"  

Const MsgMld = "Konvertierung beendet."  
Const MsgErr = "Datei nicht gefunden!"  

Dim Fso, File, Text, Feld, Line, Z, Z1(15), Z2(3), i
    
Feld = Array(F01, F02, F03, F04, F05, F06, F07, F08, F09, F10, F11, F12, F13, F14, F15, F16)

Set Fso = CreateObject("Scripting.FileSystemObject")  

If Fso.FileExists(Path) = False Then MsgBox MsgErr, vbExclamation, "Fehler":  WScript.Quit  

Text = Split(Fso.OpenTextFile(Path).ReadAll, vbCrLf)

Set File = Fso.CreateTextFile(Path)

File.WriteLine Join(Feld, ";")  

For Each Line In Text
    Z = Split(Line, ";")  
    If UBound(Z) >= 19 Then
        For i = 0 To UBound(Z1):  Z1(i) = Z(i):  Next
        File.WriteLine Join(Z1, ";")  
        For i = 0 To UBound(Z2):  Z2(i) = Z(i + 16):  Next
        File.WriteLine Join(Z2, ";")  
    End If
Next

File.Close

MsgBox MsgMld, vbInformation, "Meldung"  

Gruß Dieter

PS. Wenn die *.Csv-Datei nur in Excel importiert werden soll, dann wäre ein VBA-Code wohl effektiver?
Member: CeMeNt
CeMeNt Sep 25, 2009 at 05:53:15 (UTC)
Goto Top
Guten Morgen Dieter!

Vielen Dank! Den Code werde ich gleich mal testen.
Ich sag dann mal Bescheid, wie es gelaufen ist, bzw. wenn ich etwas nicht hinbekomme.

Zwecks Excel habe ich mich vielleicht etwas falsch ausgedrückt.
Die CSV soll am Ende in unsere FIBU eingelesen werden. Excel ist dafür (eigentlich) nicht nötig.
Ich hätte es dann nur als Hilfsmittel verwendet, um die CSV zu erzeugen.

Bis später,

Gruß CeMeNt
Member: CeMeNt
CeMeNt Sep 25, 2009 at 06:27:17 (UTC)
Goto Top
Sooo, da bin ich noch mal.
Ich hab das jetzt folgendermaßen gemacht:

- Deinen Quellcode kopiert, und als "Convert.vbs" abgespeichert.
- Eine csv erzeugt, die einen Datensatz in einer Zeile abbildet
- Feldnamen und Pfade in der vbs angepasst
- vbs gestartet

Am Ende steht "Konvertierung beendet"

Aus meiner csv, die vorher aus rund 4000 Zeilen bestand, wurde eine einzige Zeile, die nur noch aus den Feldnamen besteht.

Da ging wohl irgendwas daneben - nur weiß ich leider nicht, was.

Was ich vorallem noch nicht ganz verstanden habe:
In Deinem VBS-Code fehlen doch eigentlich noch die Spalten 17 - 20 (die ja quasi per Zeilenumbruch in die jeweils zweite Zeile geschrieben werden sollen)

Aber vielleicht können wir ja auf dieser Basis etwas anders vorangehen?
z.B. so:

Gegeben sei eine CSV (semikolongetrennt), die aus 20 Spalten (und knapp 4000 Zeilen) besteht.
Nun soll die CSV so umformatiert werden, dass die letzten 4 Spalten in die zweite Zeile umgebrochen werden.

Das Ergebnis ist dann eine CSV, die aus knapp 8000 Zeilen besteht.

Wäre klasse, wenn Du noch einmal Zeit und Lust hättest, mir zu helfen.
Alle anderen, die hier zufällig vorbeischauen, sind natürlich auch herzlich eingeladen, hier mitzuknobeln.

Danke schon mal.

CeMeNt
Mitglied: 76109
76109 Sep 25, 2009 at 07:46:10 (UTC)
Goto Top
Guten Morgen CeMeNt!

Genauso, wie Du es beschrieben hast, sollte es eigentlich funktionieren.

Mein Test mit Zeilen in dieser Form:
A;B;C;D;E;F;G;H;I;K;L;M;N;O;P;Q;R;S;T
ergibt:
A;B;C;D;E;F;G;H;I;K;L;M;N;O;P
Q;R;S;T

In Zeile 39-47, werden alle Spalten in die Variable Z geschrieben und aufgeteilt in Z1 = 16 Spalten und Z2 = 4 Spalten. Oder habe ich doch was falsch verstanden.

Ist Dein ursprüngliches Cvs-Format enventuell UTF8 oder so. Kopiere mal eine Orignal-Zeile in einen normalen Texteditor und schau ob der Text normal aussieht.

Gruß Dieter
Member: CeMeNt
CeMeNt Sep 25, 2009 at 08:58:16 (UTC)
Goto Top
Super! Wir kommen der Sache näher!

In meiner Ausgabe-Datei waren nicht exakt 20 Spalten.
Solche Zeilen werden dann einfach gelöscht!

Hab aber meine Abfrage geändert. Nun sind es immer 20...

Die letzte Kleinigkeit:
In der konvertierten CFG stehen die Feldnamen.
Bekommt man die noch weg? Denn sonst kann das FIBU-Programm mit der Datei leider nichts anfangen.

Danke schon mal! Echt Super!!

Gruß CeMeNt
Mitglied: 76109
76109 Sep 25, 2009 at 09:16:38 (UTC)
Goto Top
Hallo CeMeNt!

Verstehe ich nicht ganz?

Heißt das jetzt, dass in die 1. Zeile keine Feldnamen geschrieben werden sollen?

Wenn ja, dann Codezeilen 5-20 und 27 und 37 entfernen.

Gruß Dieter
Member: CeMeNt
CeMeNt Sep 25, 2009 at 09:46:27 (UTC)
Goto Top
Super! Perfekt!!
Vielen Dank!

Ok, ich geb's zu. Das mit den Feldnamen habe ich ja selbst ins Spiel gebracht. Sorry!
Nein, ich brauche keine Feldnamen in der ersten Zeile.

Aber nach Deiner ersten Antwort, wusste ich ja noch nicht, was kommen wird.
Dachte halt, dass Du irgendwas direkt im Access schreiben würdest.
Dann hätte man bestimmt die Feldnamen benötigt.

Aber so ist ja alles noch viel einfacher! Und jetzt funktioniert es genauso, wie gewünscht!

Danke noch mal und ein schönes Wochenende!

CeMeNt
Mitglied: 76109
76109 Sep 25, 2009 at 09:57:27 (UTC)
Goto Top
Hallo CeMeNt!

Gern geschehenface-smile

Dann sind ja soweit alle Unklarheiten beseitigt und wünsche ich Dir auch ein schönes WE

Gruß Dieter