Hallo, ich brauche Hilfe bei einer für mich kniffeligen Frage. Ich bekomme eine Datei in Excel-Format und soll diese in Access in einer Tabelle speichern. Problem dabei…die Daten sind in 3 Zeilen untereinander und auch mit Leerfeldern. Mir fehlt die Erfahrung und der richtige Ansatz. Zumindest eine Möglichkeit hab ich bedacht…das Excelfile erstmal komplett in Access einlesen und in einer Art Übergangtabelle speichern und diese dann auslesen. Richtiger Ansatz oder schon verkehrt?? Bitte helt mir weiter. Noch eines…bin echt noch nicht fit in Access und VBA falls das benutzt wird.
Vielen lieben Dank!
Hallo,
das Excelfile erstmal komplett
in Access einlesen und in einer Art Übergangtabelle speichern
und diese dann auslesen.
theoretisch geht das, aber …
Access wird wahrscheinlich Scwirigkeiten haben, die Felddatentypen richtig zuzuordnen (Text, Zahl, etc.), wenn in einer Spalte verschiedene Datentypen untereinanderstehen.
Und das nachträgliche Auseinandersortieren mit VBA ist auch nicht so ganz trivial (Tabellen über OpenRecordset ansprechen, mit einer DoUntil-Schleife (darin verschachtelt eine ForNext-Schleife von 1 bis 3) die Datensätze mit den Move-Methoden durchgehen).
Wenn die Datenmenge nicht sehr groß ist, würde ich eher versuchen, die Tabelle in Excel per Hand für den Import aufzubereiten.
HTH,
ujk
Hi rina,
Access hat keine Möglichkeit, mehrere Excel-Zeilen zu einer Tabellenzeile zusammenzupacken, die Eingabe für eine Zeile wird in genau einer Zeile erwartet. Außer Programmierung oder händischem Umbauen der Exceltabelle sehe ich keine Möglichkeit.
Gruß Ralf
Danke für eure Hilfe. Leider ist das Problem das die Übernahme der Daten automatisiert erfolgen soll und die Anwender nicht unbedingt in der Lage sind die Tabelle per Hand so umzuwandeln. Ich dachte halt an eine Möglichkeit schon die ganze Zeile einzulesen aber jedes Feld in eine Variable zu speichern und dann über Abfrageschleifen entsprechend zuzuordnen z.Bsp. fängt die Auftragsnummer immer mit A04 an und ich weiss ein neuer Datensatz (für mich) beginnt, das heißt alle nachfolgenden Daten müssen in die entsprechenden Felder der Zieltabelle in Access. Geht das nicht vieleicht doch so?? Auf aufwendige Programmierung hab ich mich inzwischen eingestellt. Ich bin euch sehr dankbar für weitere Hilfe.
LG Karina
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Rina
Habe selber eine Tabelle mit 54 Zeilen pro Datensatz gehabt und diese mit einer Kreuztebelle in 54 Spalten umgewandelt. Wäre intresant, wenn du mir mindestens 9 Zeilen mit 3 Datensätzen mal zusenden würdest.
Gruss
Dieter
Hallo,
zuzuordnen z.Bsp. fängt die Auftragsnummer immer mit A04 an
und ich weiss ein neuer Datensatz (für mich) beginnt, das
heißt alle nachfolgenden Daten müssen in die entsprechenden
Felder der Zieltabelle in Access. Geht das nicht vieleicht
doch so?? Auf aufwendige Programmierung hab ich mich
inzwischen eingestellt.
also Du kannst eine Tabelle mit der „OpenRecordset“-Methode öffnen (schlag die Stichworte in der Access-Hilfe nach, die ist sehr ausführlich, frag hier nach, wenn da was unklar bleibt).
Zwischen den Datensätzen blätterst Du mit den „Move“-Methoden.
Die Datenfelder kannst Du über die Feldnamen ansprechen.
Die Überprüfung, ob eine Auftragsnummer vorliegt, geht mit den Stringfunktionen (If Left(rst1![Feldname], 3) = „A04“ Then …
Mit den Recordset-Methoden kannst Du auch in eine (zweite) Ausgabetabelle scheiben.
(Vielleicht wäre es am besten, wenn die Eingabetabelle einspaltig wäre, dann hätte jeder Datensatz nur ein Feld.)
HTH,
ujk
nochwas
Hallo,
man kann aus Excel heraus auch in eine Textdatei exportieren (Zellinhalte werden durch Tabstops getrennt). Vielleicht erleichtert das in Import nach Access.
Warum ist die Excel-Tabelle so breit? Excekl bietet doch Platz für 255 Spalten.
ujk
Ich bin immer noch net ganz schlau…aber mal ein Beispiel eines Datensatzes:
A041126 8640_5021 26.11.2004 26.11.2004
1 265_2563 10 1P 10 1P
Pyranglas
2 265_2520 20 1P 20 1P
Pyranacryl
A041127 8640_5423…usw.
Habe also bei automatischer Übernahme 8 Spalten und mind. 3 Zeilen je Datensatz (Warenbewegung 1). Erste Zeile soll immer als Kopfzeile oder in festen Variablen zur Verfügung stehen. Also Ziel(End)tabelle soll auch so aufgebaut sein:
A041126 8640_5021 26.11.2004 26.11.2004 265_2563 10 1P 10 1P
A041126 8640_5021 26.11.2004 26.11.2004 265_2520 20 1P 20 1P
Geht das so?? Mit meinem bischen Accesskenntnissen komm ich echt nicht weiter und die Hilfe dasmit komm ich auch net wirklich klar. Sorry wenn ich mich hier so als blondes Doofchen outen muss. Bin Dankbar für jede Hilfe.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Moin rina,
als blondes Doofchen outen
musst Du Dich nicht, hier liegt einfach ein grundsätzliches Missverständnis vor: Sowohl Excel als auch Access kennen nur zwei Dimensionen, nämlich die Zeile und die Spalte. Weder Excel noch Accvess können die vermurkste Struktur der Eingabedaten beheben, dazu braucht es ein Programm, das die drei Eingabezeilen zusammenklebt. Mit QBASIC oder irgendeinem modernen Ableger müsste das zu schaffen sein.
Gruß Ralf
Hallo,
was Du vor hast ist gar nicht so unüblich wie z. T. behauptet
wird.
Man denke einmal an die Struktur in XML Dokumenten oder
einem EDI Nachrichten Format.
Für den professionellen Einsatz kauft man sich für Dein
„Problem“ einen Konverter, der die Datenstrukturen (z.B.
XML vs. 2-dimensionale DB Struktur) über ein Mapping
übersetzt.
In Deinem Fall ist das zeilenweise auslesen der „Datei“
(ob Text oder DB Datei ist dann unerheblich) mit Auswertung
eines Gruppenwechsel nötig. Die „Gruppe“ wird eingeleitet
durch Deine Kopfzeile. Anschließend wird so lange mit den
Gruppen- und Deteildaten weggespeichert, bis eine neue Kopf-
zeile aufgefunden wird.
Wenn Du möchtest helfe ich Dir bei der Routine.
Gruß Andreas
Hallo,
A041126 8640_5021 26.11.2004 26.11.2004
1 265_2563 10 1P 10 1P
Pyranglas
2 265_2520 20 1P 20 1P
Pyranacryl
A041127 8640_5423…usw.
Habe also bei automatischer Übernahme 8 Spalten und mind. 3
Zeilen je Datensatz (Warenbewegung 1).
Du könntest auch die Excel-Werkzeuge nutzen, um die Tabelle vor Import zu „linearisieren“: Sagen wir in Zelle A2 steht der Wert, der besser in I1 stehen sollte. Einfach in I1 eintragen „=A2“. Wenn Du dann die Zelle markierst, erscheint in der unteren rechten Ecke ein kleines schwarzes Quadrat, das Du mit dem Mauszeiger nach unten ziehst. Dadurch füllt sich die Spalte automatisch mit den richtigen Verweisen auf. Das für die anderen Zellen analog. Dann müßte man noch einen Weg finden, die überschüssigen Zeilen loszuwerden.
ujk
Hallo,
du kannst die Tabelle in Ecel als Text csv speichern. Diese Datei importieren. Für jedes Feld gibt es ein Trennzeichen.
Wenn du immer drei Zeilen info hast, kannst du die importierte Datei leicht auswerten indem du eine neue Tabelle erstellst und die Felder mit einer Prozedur sequentiel einlist.
Das ganze mit einer 2 stufigen do while schleife. Fertig.
Gruß Hans