samtrex
Goto Top

MySQL Adressbuch in Outlook importieren (Probleme mit Zeilenumbruch in .CSV)

Hallo zusammen,
mein Problem scheind eigentlich ganz simpel zu sein, doch irgenwie auch wieder nicht.

Folgendes:
Ich habe mir ein Adressbuch in einer MySQL Tabelle erstellt. Dieses möchte ich jetzt gerne nach Outlook 2003 importieren. - Soweit die Theorie...
In Outlook gibt es die Möglichkeit Adressbücher aus .CSV Dateien zu importeieren. (Windows CSV "," getrennt)

Im Header (1. Zeile) befinden sich die Datenfeldnamen - bei Outlook 90 Stück im Stil von: "Anrede","Vorname", ....
Danach folgen pro Zeile ein Adressbucheintrag.

Alles kein Problem. Jetzt gibt es bestimmt mehrere Möglichkeiten um ans Ziel zu kommen.
Nach ein bisschen Googlen habe ich dann SELECT * INTO OUTFILE gefunden und dies erstmal in PHPMyAdmin ausprobiert.
Tolle Sache, leider stimmen die Datenfelder meines Adressbuches nicht mit Outlook überein.

Daher habe ich mir jetzt etwas kleines geschrieben:

// Das sind die Datenheader von Outlook!
// "Anrede","Vorname","Weitere Vornamen","Nachname","Suffix","Firma","Abteilung","Position","Straße geschäftlich","Straße geschäftlich 2","Straße geschäftlich 3", 
// "Ort geschäftlich","Region geschäftlich","Postleitzahl geschäftlich","Land geschäftlich","Straße privat","Straße privat 2","Straße privat 3","Ort privat", 
// "Region privat","Postleitzahl privat","Land privat","Weitere Straße","Weitere Straße 2","Weitere Straße 3","Weiterer Ort","Weitere Region","Weitere Postleitzahl", 
// "Weiteres Land","Telefon Assistent","Fax geschäftlich","Telefon geschäftlich","Telefon geschäftlich 2","Rückmeldung","Autotelefon","Telefon Firma","Fax privat", 
// "Telefon privat","Telefon privat 2","ISDN","Mobiltelefon","Weiteres Fax","Weiteres Telefon","Pager","Haupttelefon","Mobiltelefon 2","Telefon für Hörbehinderte", 
// "Telex","Abrechnungsinformation","Benutzer 1","Benutzer 2","Benutzer 3","Benutzer 4","Beruf","Büro","E-Mail-Adresse","E-Mail-Typ","E-Mail: Angezeigter Name", 
// "E-Mail 2: Adresse","E-Mail 2: Typ","E-Mail 2: Angezeigter Name","E-Mail 3: Adresse","E-Mail 3: Typ","E-Mail 3: Angezeigter Name","Empfohlen von","Geburtstag", 
// "Geschlecht","Hobby","Initialen","Internet-Frei/Gebucht","Jahrestag","Kategorien","Kinder","Konto","Name Assistent","Name des/der Vorgesetzten","Notizen", 
// "Organisations-Nr.","Ort","Partner","Postfach geschäftlich","Postfach privat","Priorität","Privat","Regierungs-Nr.","Reisekilometer","Sprache","Stichwörter", 
// "Vertraulichkeit","Verzeichnisserver","Webseite","Weiteres Postfach" 


// Hier werden diese als erste Zeile in die Variable $NDS geschrieben		
	$NDS  = '"Anrede","Vorname","Weitere Vornamen","Nachname","Suffix","Firma","Abteilung","Position","Straße geschäftlich","Straße geschäftlich 2","Straße geschäftlich 3","Ort geschäftlich","Region geschäftlich","Postleitzahl geschäftlich","Land geschäftlich","Straße privat","Straße privat 2","Straße privat 3","Ort privat","Region privat","Postleitzahl privat","Land privat","Weitere Straße","Weitere Straße 2","Weitere Straße 3","Weiterer Ort","Weitere Region","Weitere Postleitzahl","Weiteres Land","Telefon Assistent","Fax geschäftlich","Telefon geschäftlich","Telefon geschäftlich 2","Rückmeldung","Autotelefon","Telefon Firma","Fax privat","Telefon privat","Telefon privat 2","ISDN","Mobiltelefon","Weiteres Fax","Weiteres Telefon","Pager","Haupttelefon","Mobiltelefon 2","Telefon für Hörbehinderte","Telex","Abrechnungsinformation","Benutzer 1","Benutzer 2","Benutzer 3","Benutzer 4","Beruf","Büro","E-Mail-Adresse","E-Mail-Typ","E-Mail: Angezeigter Name","E-Mail 2: Adresse","E-Mail 2: Typ","E-Mail 2: Angezeigter Name","E-Mail 3: Adresse","E-Mail 3: Typ","E-Mail 3: Angezeigter Name","Empfohlen von","Geburtstag","Geschlecht","Hobby","Initialen","Internet-Frei/Gebucht","Jahrestag","Kategorien","Kinder","Konto","Name Assistent","Name des/der Vorgesetzten","Notizen","Organisations-Nr.","Ort","Partner","Postfach geschäftlich","Postfach privat","Priorität","Privat","Regierungs-Nr.","Reisekilometer","Sprache","Stichwörter","Vertraulichkeit","Verzeichnisserver","Webseite","Weiteres Postfach"';  
	$NDS .= '/n';  

	mysql_connect($dbsvr, $dbuser, $dbpass);
	mysql_select_db($dbname);
	$RS = mysql_query("SELECT * FROM adressbook ORDER BY status, name");  

// In dieser Schleife werden die Datenfelder aus meinem Adressbuch in Outlook Datenfelder geschrieben / pro Datensatz

	while ($DS = mysql_fetch_assoc($RS))
	{
		$NDS .= '"",'; //Anrede  
		$NDS .= '"' . $DS["vorname"] . '",'; //Vorname  
		$NDS .= '"",'; //Weitere Vornamen  
		$NDS .= '"' . $DS["name"] . '",'; //Nachname  
		$NDS .= '"",'; //Suffix	Firma  
		$NDS .= '"",'; //Abteilung  
		$NDS .= '"",'; //Position  
		$NDS .= '"' . $DS["strasse2"] . '",'; //Straße geschäftlich  
		$NDS .= '"",'; //Straße geschäftlich 2  
		$NDS .= '"",'; //Straße geschäftlich 3  
		$NDS .= '"' . $DS["ort2"] . '",'; //Ort geschäftlich  
		$NDS .= '"",'; //Region geschäftlich  
		$NDS .= '"' . $DS["plz2"] . '",'; //Postleitzahl geschäftlich  
		$NDS .= '"",'; //Land geschäftlich  
		$NDS .= '"' . $DS["strasse"] . '",'; //Straße privat  
		$NDS .= '"",'; //Straße privat 2  
		$NDS .= '"",'; //Straße privat 3  
		$NDS .= '"' . $DS["ort"] . '",'; //Ort privat  
		$NDS .= '"",'; //Region privat  
		$NDS .= '"' . $DS["plz"] . '",'; //Postleitzahl privat  
		$NDS .= '"",'; //Land privat  
		$NDS .= '"",'; //Weitere Straße  
		$NDS .= '"",'; //Weitere Straße 2  
		$NDS .= '"",'; //Weitere Straße 3  
		$NDS .= '"",'; //Weiterer Ort  
		$NDS .= '"",'; //Weitere Region  
		$NDS .= '"",'; //Weitere Postleitzahl  
		$NDS .= '"",'; //Weiteres Land  
		$NDS .= '"",'; //Telefon Assistent  
		$NDS .= '"' . $DS["fax2"] . '",'; //Fax geschäftlich  
		$NDS .= '"' . $DS["tel3"] . '",'; //Telefon geschäftlich  
		$NDS .= '"' . $DS["tel4"] . '",'; //Telefon geschäftlich 2  
		$NDS .= '"",'; //Rückmeldung  
		$NDS .= '"",'; //Autotelefon  
		$NDS .= '"",'; //Telefon Firma  
		$NDS .= '"' . $DS["fax"] . '",'; //Fax privat  
		$NDS .= '"' . $DS["tel"] . '",'; //Telefon privat  
		$NDS .= '"",'; //Telefon privat 2  
		$NDS .= '"",'; //ISDN  
		$NDS .= '"' . $DS["tel2"] . '",'; //Mobiltelefon  
		$NDS .= '"",'; //Weiteres Fax  
		$NDS .= '"",'; //Weiteres Telefon  
		$NDS .= '"",'; //Pager  
		$NDS .= '"",'; //Haupttelefon  
		$NDS .= '"",'; //Mobiltelefon 2  
		$NDS .= '"",'; //Telefon für Hörbehinderte  
		$NDS .= '"",'; //Telex  
		$NDS .= '"",'; //Abrechnungsinformationen  
		$NDS .= '"",'; //Benutzer 1  
		$NDS .= '"",'; //Benutzer 2  
		$NDS .= '"",'; //Benutzer 3  
		$NDS .= '"",'; //Benutzer 4  
		$NDS .= '"",'; //Beruf  
		$NDS .= '"",'; //Büro  
		$NDS .= '"' . $DS["email"] . '",'; //E-Mail-Adresse  
		$NDS .= '"",'; //E-Mail-Typ  
		$NDS .= '"' . $DS["email"] . '",'; //E-Mail: Angezeigter Name  
		$NDS .= '"' . $DS["email2"] . '",'; //E-Mail 2 Adresse  
		$NDS .= '"",'; //E-Mail 2 Typ  
		$NDS .= '"' . $DS["email2"] . '",'; //E-Mail 2 Angezeigter Name  
		$NDS .= '"' . $DS["email3"] . '",'; //E-Mail 3 Adresse  
		$NDS .= '"",'; //E-Mail 3 Typ  
		$NDS .= '"' . $DS["email3"] . '",'; //E-Mail 3 Angezeigter Name  
		$NDS .= '"",'; //Empfohlen von  
		$NDS .= '"' . $DS["geb"] . '",'; //Geburtstag  
		$NDS .= '"",'; //Geschlecht  
		$NDS .= '"",'; //Hobby  
		$NDS .= '"",'; //Initialen  
		$NDS .= '"",'; //Internet-Frei/Gebucht  
		$NDS .= '"",'; //Jahrestag  
		$NDS .= '"' . $DS["status"] . '",'; //Kategorien  
		$NDS .= '"",'; //Kinder  
		$NDS .= '"",'; //Konto  
		$NDS .= '"",'; //Name Assistent  
		$NDS .= '"",'; //Name des/der Vorgesetzten  
		$NDS .= '"' . $DS["notes"] & ', ' & $DS["notes2"] . '",'; //Notizen  
		$NDS .= '"",'; //Organisations-Nr.  
		$NDS .= '"",'; //Ort  
		$NDS .= '"",'; //Partner  
		$NDS .= '"",'; //Postfach geschäftlich  
		$NDS .= '"",'; //Postfach privat  
		$NDS .= '"",'; //Priorität  
		$NDS .= '"",'; //Privat  
		$NDS .= '"",'; //Regierungs-Nr.  
		$NDS .= '"",'; //Reisekilometer  
		$NDS .= '"",'; //Sprache  
		$NDS .= '"",'; //Stichwörter  
		$NDS .= '"",'; //Vertaulichkeit  
		$NDS .= '"",'; //Verzeichnisserver  
		$NDS .= '"' . $DS["hp"] . '",'; //Webseite  
		$NDS .= '""';  //Weiteres Postfach	  
		$NDS .= '/n';  
	}

// Der komplette String wird dann in die Datei geschrieben

$dlfile = fopen("testfile.csv", w);  
fwrite($dlfile, $NDS);	
fclose($dlfile);

So, das ganze funktioniert soweit ganz gut. Allerdings habe ich in der .csv keine Zeilenumbrüche!!!
Ich habe gegoogled bis ich schwarz war. Alles was ich gefunden habe ist: Hänge ein "/n" oder ein "/r/n" an den String....
Wie Ihr seht habe ich das getan. Wenn ich die Datei in Notepad öffne habe ich eine einzige lange Zeile die Notepad von sich aus irgendwann umbricht.
Öffne ich sie in meinem favorisierten Editor (EvolvED) habe ich nur eine ellen lange Zeile.

Kann mir da wer weiterhelfen? Ich kapier das einfach nicht ....
Übrigens, kann ich statt die Datei nur zu erstellen diese nicht auch "nicht" schreiben und den String direkt zum download anbieten? Über "header content-type"???

Bin für jeden Rat dankbar....

MfG Sam

Content-ID: 125562

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

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

76109
76109 23.09.2009 um 00:33:51 Uhr
Goto Top
Hallo Sam!

Versuch mal anstatt "/r/n" das hier "\r\n".

Gruß Dieter
nxclass
nxclass 23.09.2009 um 08:35:17 Uhr
Goto Top
Nach ein bisschen Googlen habe ich dann SELECT * INTO OUTFILE gefunden und dies erstmal in PHPMyAdmin ausprobiert.
Tolle Sache, leider stimmen die Datenfelder meines Adressbuches nicht mit Outlook überein.

wieso erstellst Du dir dann nicht einfach eine Temp.Tabelle und exportierst diese ?
CREATE TEMPORARY TABLE IF NOT EXISTS 'export'  
SELECT
  '' AS 'Anrede',  
  `vorname` AS 'Vorname',  
/* usw. */
FROM `adressbook` ORDER BY `status`, `name`;

SELECT * INTO OUTFILE 'wo/auch/immer'  
/* ggf. noch
FIELDS TERMINATED BY ',' 
FIELDS ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
*/
FROM `export`;
SamTrex
SamTrex 23.09.2009 um 18:18:43 Uhr
Goto Top
Danke euch für die schnelle Hilfe!

@Dieter
Wenn ich so etwas sehe kann ich echt verzweifeln... face-sad - nur / & \ vertauscht...
Ich habe als erstes das '/n' gegen '/r/n' getauscht. - Das funktioniert auch nicht !!! Es darf kein ' sondern es muß ein " sein!
Muß ich auch sonst irgendwo darauf achten " statt ' zu nehmen? In der "Füllung" des Headers habe ich ja meine lange Zeichenkette die " beinhaltet in ' gekapselt.
Wenn ich die ' als " geschrieben habe bekam ich eine Fehlermeldung....

@nxclass
Interesanter Vorschlag. Ich bin noch sehr neu auf dem Gebiet PHP/MySQL, die Möglichkeit einer temporären Tabelle kannte ich noch gar nicht.
Ich werde mir das auf jeden Fall mal näher ansehen.

MfG
Sam
nxclass
nxclass 23.09.2009 um 19:31:14 Uhr
Goto Top
Beachte die doppelten Anführungszeichen zu benutzen! : "\n" nicht '\n'
PHP parst nur die Strings mit "

zB. echo '$var' sollte auch nicht gehen - nur echo "$var"
SamTrex
SamTrex 23.09.2009 um 19:37:39 Uhr
Goto Top
Danke, gut zu wissen!

MfG
Sam