Home > Artikel > Ausgabe 6/2011 > CSV-Export für Adressdaten

CSV-Export für Adressdaten

  PDF ansehen

  Download PDF und Beispieldatenbank

Der Export von Daten ist eine sehr wichtige Funktion unter Access. Ein Export ist schnell erledigt – Sie rufen einfach den Export-Assistenten auf, tragen die notwendigen Daten ein und schreiben die Daten dann in eine entsprechende Text-, CSV- oder Excel-Datei. Im vorliegenden Beitrag wollen wir uns ansehen, welche Anforderungen es in der Praxis gibt. Dazu werfen wir einen genauen Blick auf einen Export, der genauen Spezifikationen genügen muss.

Beispieldatenbank

Die Beispiele zu diesem Artikel finden Sie in der Datenbank 1106_CSVExport.mdb.

Zum Götterboten

In diesem Artikel geht es um den Paketversand mit Hermes. Hier soll keine Schleichwerbung gemacht werden, aber Hermes bietet eine Online-Schnittstelle, der Sie eine CSV-Datei mit Adressdaten übergeben können.

Diese Daten werden dann online gespeichert und können für den späteren Druck von Versandetiketten weiterverwendet werden.

Wie bei vielen anderen Anbietern können Sie bei Online-Beauftragung ein paar Cent oder gar einen Euro sparen. Sie geben dann die Empfänger- und die Absenderdaten online ein, drucken einen Paketschein aus, versehen Ihre Sendung damit und geben diese beim Postamt oder beim jeweiligen Dienstleister ab.

Im Beispiel ist dies nicht anders: Das Formular aus Bild 1 etwa ist bereits zur Hälfte vorausgefüllt, weil der Absender sich registriert und seine Adressdaten hinterlegt hat. Hier braucht man nur noch die Daten des Empfängers einzutragen, weiter unten im Formular die Paketgröße auszuwählen und zwei Häkchen zu setzen – etwa zum Akzeptieren der AGB.

Beispiel für einen Online-Paketschein

Bild 1: Beispiel für einen Online-Paketschein

Die vorliegenden Absenderdaten sparen schon einige Arbeit. Wenn Sie jedoch regelmäßig Sendungen an Ihre Kunden verschicken und deren Adressdaten in einer Datenbank vorliegen, macht es unnötig Arbeit, all diese Daten manuell in das Formular aus Bild 1 zu übertragen.

Ein Blick in die Navigationsleiste links offenbart jedoch einen Eintrag namens Import Adressdaten. Das hört sich gut an! Einen Klick weiter zeigt sich das Formular aus Bild 2. Hier können Sie eine Datei von Ihrer Festplatte angeben und diese zum Einlesen der enthaltenen Daten hochladen. Fehlt nur noch eine Information: Wie soll diese Datei aussehen und wie bekommen wir die vorliegenden Adressdaten aus der Datenbank dort hinein?

Schnittstelle zum Hochladen von CSV-Dateien mit Adressenlisten

Bild 2: Schnittstelle zum Hochladen von CSV-Dateien mit Adressenlisten

Import-Vorgaben

Normalerweise bieten Dienstleiter wie der aus unserem Beispiel eine Beschreibung der zu liefernden Daten an. Das diese nicht nach Gutdünken zusammengestellt werden können, liegt auf der Hand: Schließlich soll die Datei automatisch eingelesen werden und muss daher einem vorgegebenen Schema entsprechen. In diesem Fall bietet der Dienstleister zwei Varianten an – eine für nationale und eine für internationale Sendungen. Für nationale Sendungen sehen die Vorgaben so aus:

  • Jede Adresse landet in einer eigenen Zeile.
  • Jede Zeile hat zehn Felder.
  • Die Felder werden durch das Semikolon (;) getrennt, die Zeilen durch einen Zeilenumbruch.
  • Es können maximal 150 Datensätze importiert werden.
  • Die zehn Felder sind so aufgebaut (maximale Zeichenzahl in Klammern): Vorname (20), Nachname (25), Adresszusatz (20), Straße (27), Hausnummer (5), PLZ (5), Ort (25), Tel. Vorwahl (6), Telefonnummer (8), E-Mail-Adresse (80).

Als erstes fällt auf, dass Straße und Hausnummer getrennt angegeben werden sollen. Ups! In den bisherigen Beispieldatenbanken haben wir Straße und Hausnummer immer in einem einzigen Feld gespeichert! Aber keine Sorge: Straße und Hausnummer können auch zusammen in das Feld Straße eingetragen werden.

Auch für die Telefonnummer gibt es zwei Felder – aber diese ist wohl ohnehin nur den Fall gedacht, dass etwas Unvorhergesehenes mit der Lieferung geschieht und der Empfänger benachrichtigt werden muss.

Unter den zehn Feldern befindet sich keines, das einen Firmennamen aufnehmen kann – außer vielleicht das Feld Adresszusatz.

Ein Blick auf das Onlineformular zur Eingabe von Adressen zeigt jedoch, dass eine Firma gegebenenfalls mit im Nachname-Feld landet (Firma/Nachname).

Export vorbereiten

Die Daten zum Füttern der Online-Schnittstelle stammen aus der Tabelle tblKunden der Beispieldatenbank, deren Entwurf wie in Bild 3 aussieht. Das Problem bei dieser Tabelle ist, dass Sie nicht alle für den Export notwendigen Felder enthält. So können wir wie oben beschrieben nicht auf ein eigenes Feld für die Hausnummer zugreifen und auch das Feld Adresszusatz ist nicht vorhanden.

Diese Tabelle dient als Datenherkunft für den Export der Adressdaten.

Bild 3: Diese Tabelle dient als Datenherkunft für den Export der Adressdaten.

Außerdem sollen die Felder Kunde (als Firma) und Nachname in einem Feld der Exportdatei zusammengefasst werden – und das hier ebenfalls nicht der Fall. Die Lösung dieses Problems ist einfach: Sie erstellen eine Abfrage, welche die Felder der Tabelle tblKunden genau so ausgibt, dass daraus eine Exportdatei nach dem gewünschten Schema erstellt werden kann.

Gehen Sie dabei folgendermaßen vor:

  • Erstellen Sie eine neue, leere Abfrage (Abfrage erstellen).
  • Fügen Sie die Tabelle tblKunden als Datenherkunft hinzu.
  • Legen Sie dann die benötigten Felder wie im Anschluss beschrieben an.

Das Zusammenstellen der Felder ist die Hauptarbeit beim Export. Das erste Feld ist einfach: Den Vornamen liefert das Feld Vorname, also ziehen Sie dieses als erstes Feld in das Entwurfsraster.

Das Feld für Firma/Nachname ist gleich etwas schwieriger: Hier benötigen wir ein sogenanntes berechnetes Feld (siehe Abfragen für die Datenauswahl – Teil VI: Berechnete Felder in Abfragen und Eigenschaften). Zuerst legen Sie den Namen des Feldes fest, wie er in der Datenblattansicht der Abfrage erscheinen soll – in diesem Fall Firma/Nachname.

Dann folgt ein Doppelpunkt und schließlich der Ausdruck mit den benötigten Daten. Da die beiden Felder Kunde und Nachname zusammengeführt und durch einen Schrägstrich getrennt werden sollen, sieht der komplette Ausdruck so aus (siehe auch Bild 4):

Entwurf der Abfrage zum Zusammenstellen der Adressdaten

Bild 4: Entwurf der Abfrage zum Zusammenstellen der Adressdaten

Firma/Nachname: [Kunde] & "/" & [Nachname]

Ein Wechsel zur Datenblattansicht offenbart jedoch einige Schwächen des ersten Ansatzes (siehe Bild 5). Wenn Kunde und/oder Nachname fehlen, soll nämlich auch kein Schrägstrich angezeigt werden. Also verwenden wir die in Access-Funktionen – Teil II: Bedingungen: Wenn(), Schalter() und Wahl() vorgestellte Wenn-Funktion.

Der erste Versuch, Firma und Nachname zusammenzuführen

Bild 5: Der erste Versuch, Firma und Nachname zusammenzuführen

Der erste Parameter gibt den zu prüfenden Ausdruck an. Ist mindestens eines der beiden Felder Kunde oder Nachname leer? Die Prüfung sieht so aus: IstNull([Kunde]) Oder IstNull([Nachname]). Wenn die Bedingung eintritt, soll kein Schrägstrich ausgegeben werden, sonst ja. Also vervollständigen Sie den Ausdruck wie folgt:

Firma/Nachname: [Kunde] & Wenn(IstNull([Kunde]) Oder IstNull([Nachname]);"";"/") & [Nachname]

Das lässt sich noch ein wenig kürzer formulieren. Dazu wenden Sie einen kleinen Trick an: Es gibt zum Verknüpfen von Texten nicht nur den Verknüpfungsoperator &, sondern auch das Plus-Zeichen (+). Wenn einer der beiden durch das Plus-Zeichen zusammengefassten Ausdrücke den Wert Null hat, wie es bei leeren Textfelder der Fall ist, dann ist auch die Verkettung beider Ausdrücke Null. Der Ausdruck sieht nun so aus:

Firma/Nachname: [Kunde] & Wenn(IstNull([Kunde]+[Nachname]);"";"/") & [Nachname]

Der Adresszusatz ist in unserem Fall immer leer. Dennoch muss dieses Feld im Export in Form eines leeren Feldes vorkommen. Es wird schlicht durch eine leere Zeichenkette zwischen zwei Semikola repräsentiert (;;). Das dritte Feld der Abfrage bezieht sich also nicht auf ein Feld der Herkunftstabelle, sondern verwendet schlicht den folgenden Ausdruck:

Adresszusatz: ""

Die nächsten beiden Felder sind Straße und Hausnummer. Glücklicherweise bietet Hermes an, beide Informationen in das Feld Straße zu schreiben. Es ist nämlich alles andere als einfach, zuverlässig die Hausnummer aus einer entsprechenden Angabe zu ermitteln. Fügen Sie also einfach das Feld Straße zum Entwurfsraster hinzu und legen Sie für das Feld Hausnummer wieder ein Feld mit einer leeren Zeichenkette an:

Hausnummer: ""

Die Postleitzahl ist wieder einfach. Sie müssen hier lediglich sicherstellen, dass der Benutzer der Datenbank es nicht ausgenutzt hat, dass das Feld PLZ mit dem Datentyp Text definiert wurde und Einträge wie D-12345 vorgenommen hat. Hier ist nämlich die reine Postleitzahl gefragt – und außerdem darf diese ohnehin nur fünf Stellen belegen. Ziehen Sie das Feld PLZ in das Entwurfsraster – genau wie das Feld Ort, das direkt verwendet werden kann. Die beiden folgenden Felder bleiben wieder leer:

Telefon-Vorwahl: ""

Telefonnummer: ""

Mit dem Hinzufügen es Feldes EMail ist die Abfrage komplett (siehe Bild 6).

Die komplette Abfrage für den Datenexport

Bild 6: Die komplette Abfrage für den Datenexport

Export in eine CSV-Datei

Den Exportvorgang starten Sie unter den verschiedenen Access-Versionen wie folgt:

Access 2003 und älter: Klicken Sie mit der rechten Maustaste auf die zu exportierende Abfrage und wählen Sie den Eintrag Exportieren... aus. Wählen Sie als Dateityp den Eintrag Textdateien aus und geben Sie einen Dateinamen wie ExportAdressdaten.csv an. Es erscheint der Textexport-Assistent, mit dem Sie zunächst festlegen, dass die Ausgabe unter Verwendung von Trennzeichen erfolgen soll (siehe Bild 7). Einen Schritt weiter wählen Sie das gewünschte Trennzeichen aus – hier das Semikolon. Außerdem ist es wichtig, unter Textbegrenzungszeichen den Wert {kein} auszuwählen (siehe Bild 8). Im letzten Schritt bestätigen Sie noch die Zieldatei und starten den Export.

Welches Trennzeichen und welches Begrenzungszeichen?

Bild 7: Welches Trennzeichen und welches Begrenzungszeichen?

Trennzeichen oder feste Breite?

Bild 8: Trennzeichen oder feste Breite?

Access 2007 und jünger: Klicken Sie mit der rechten Maustaste auf die zu exportierende Abfrage im Navigationsbereich und wählen Sie den Eintrag Exportieren|Textdatei aus dem Kontextmenü aus. Im folgenden Dialog wählen Sie die Zieldatei aus, die übrigen Einstellungen sind nicht relevant (siehe Bild 9). Die folgenden Schritte entsprechen denen unter Access 2003 und älter.

Festlegen der Zieldatei unter Access 2007 und jünger

Bild 9: Festlegen der Zieldatei unter Access 2007 und jünger

Die exportierte Datei sieht im Texteditor nun wie in Bild 10 aus.

Die exportierten Adressen im Texteditor

Bild 10: Die exportierten Adressen im Texteditor

Export-Datei hochladen

Nach dem Sie die Daten in die CSV-Datei exportiert haben, laden Sie diese zum Diensleister hoch. Dazu klicken Sie zunächst auf die Durchsuchen-Schaltfläche des Formulars aus Bild 3. Wählen Sie die soeben erstellte Datei aus und klicken Sie danach auf den Link Adressen importieren.

Und wie üblich funktioniert nicht alles beim ersten Versuch: Die Webseite moniert einige zu lange Nachnamen. Dies resultiert aus dem Zusammenführen von Kunde und Nachname. Sie können die Daten nun entweder so anpassen, dass die entsprechende Spalte nur noch die ersten 25 Zeichen enthält oder die Firma in den Adresszusatz verschieben. Wir wählen die letztere Lösung.

Außerdem stellen wir sicher, dass die Daten alle die gewünschte maximale Länge aufweisen. Dies geschieht, indem wir für alle Felder eine Left-Funktion hinzufügen. Diese Funktion liefert nur die ersten n Zeichen einer Zeichenkette, wobei die Zeichenkette mit dem ersten und die Anzahl der Zeichen mit dem zweiten Parameter übergeben wird. Sie lernen diese Funktion in einem Artikel in einer späteren Ausgabe von Access [basics] kennen.

Das Feld zur Ausgabe des Nachnamens sieht nun beispielsweise wie folgt aus:

Nachname1: Links([Nachname];25)

Mit diesen Modifikationen funktioniert der Import der Adressdaten beim Versanddienstleister bereits (siehe Bild 11). Allerdings kann es vorkommen, dass eine Adresse keinen Vor- und Nachnamen enthält. In diesem Fall soll die Spalte mit den Nachnamen doch den Firmennamen enthalten. Dazu ändern Sie diese wie folgt:

Die Adressen sind beim Versand-Dienstleister angekommen.

Bild 11: Die Adressen sind beim Versand-Dienstleister angekommen.

Nachname1: Wenn(IstNull([Nachname]);[Kunde];Links([Nachname];25))

Außerdem soll der Firmenname in diesem Fall natürlich nicht mehr als Adresszusatz angezeigt werden, was Sie mit diesem Ausdruck in der Abfrage realisieren:

Adresszusatz: Wenn(IstNull([Nachname]);""; Links([Kunde];20))

Wenn Sie Daten einmal beim Dienstleister angekommen sind, können Sie diese dort weiterverarbeiten.

Dazu klicken Sie in diesem Fall etwa auf die Schaltfläche Auftrag bearbeiten, geben dort die fehlenden Daten wie etwa die Paketgröße ein (siehe Bild 12), haken die AGB ab und drucken schließlich den Paketschein aus (siehe Bild 13).

Ergänzen der fehlenden Informationen

Bild 12: Ergänzen der fehlenden Informationen

Der fertige Paketschein

Bild 13: Der fertige Paketschein

Zusammenfassung und Ausblick

Den Export-Vorgang können Sie natürlich automatisieren. Dazu legen Sie eine sogenannte Spezifikation an und verwenden einen speziellen VBA-Befehl, um die Daten entsprechend der Spezifikation in einer Datei zu speichern.

Wie dies funktioniert, erfahren Sie im Artikel Im- und Export-Spezifikationen definieren und verwenden.

Auch das Ausfüllen der fehlenden Daten im Paketschein-Formular können Sie theoretisch automatisiert von Access aus erledigen. Prinzipiell würden Sie dabei ein Formular mit einem Webbrowser-Steuerelement ausstatten, mit dem Sie Webseiten in einem Access-Formular darstellen können.

Die Access-Anwendung würde dann die entsprechende Seite des Versand-Dienstleisters aufrufen und die Eingabe der notwendigen Daten sowie das Anklicken der entsprechenden Links automatisiert durchführen. Diese Lösung würde allerdings den Rahmen dieses Artikels sprengen.