Mit Java Outlook Kontakte aus einer Excelliste generieren


GreennoisOn

Mitglied
Hallo,

wie kann man mit Java aus einer Excelliste Outlook Kontakte erzeugen? Heißt man hat eine Excelliste die mit Name,Vorname usw gefüllt ist. Diese Liste soll Java dann importieren und daraus dann Outlook Kontakte erzeugen. Das ist mein bisheriger Quellcode an den ich gerne anknüpfen würde:

Starting Klasse:

Code:
package org.patrickm.test; 

import java.io.BufferedReader;
import java.io.InputStreamReader;

import org.patrickm.test.vCard;

public class Starting {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		vCard vcard = new vCard();
		
        fillinvCard(vcard);
        
        
        if(vcard.writing("test.vcf") == false) /** Fehlerbehandlung */
        {
          
        	return;
        }
        
        System.out.println("finished!"); // Konsolenausgabe das der Vorgang fertiggestellt wurde
    }
	//Konsoleneingabe bzw. Abfrage
    public static void fillinvCard(vCard vcard){ 
        int count = 0;
        do{
          try {
              BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
 
             System.out.print("Vorname : ");
             vcard.setVorname(console.readLine());
             
             System.out.print("Nachname : ");
             vcard.setNachname(console.readLine());  
             
             System.out.print("E-mail : ");
             vcard.setE_mail(console.readLine());
             
             System.out.print("Adresse : ");
             vcard.setAddresse(console.readLine());
             
             System.out.print("Organisation : ");
             vcard.setOrganisation(console.readLine());
             
             System.out.print("Telefon : ");
             vcard.setTelefon(console.readLine());
             
             count = 3;
          } catch (Exception ex) {
            System.out.println("Fehlereingabe");
            count++;
            if(count == 3)
            {
              
            }
          }
        }while (count < 3);
    }

	}


Vcard Klasse:

Code:
package org.Green.test;

//Importieren der Werte
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

//Hier werden die Eigenschaften der anderen Klasse abgefragt
public class vCard {

	 private String Vorname;
	    private String Nachname;
	    private String Organisation;
	    private String URL;
	    private String E_mail;
	    private String Telefon;
	    private String Addresse;
	    public String getVorname() {
	        return Vorname;
	    }
	    public void setVorname(String vorname) {
	        Vorname = vorname;
	    }
	    public String getNachname() {
	        return Nachname;
	    }
	    public void setNachname(String nachname) {
	        Nachname = nachname;
	    }
	    public String getOrganisation() {
	        return Organisation;
	    }
	    public void setOrganisation(String organisation) {
	        Organisation = organisation;
	    }
	    public String getURL() {
	        return URL;
	    }
	    public void setURL(String uRL) {
	        URL = uRL;
	    }
	    public String getE_mail() {
	        return E_mail;
	    }
	    public void setE_mail(String e_mail) {
	        E_mail = e_mail;
	    }
	    public String getTelefon() {
	        return Telefon;
	    }
	    public void setTelefon(String telefon) {
	        Telefon = telefon;
	    }
	    public String getAddresse() {
	        return Addresse;
	    }
	    public void setAddresse(String addresse) {
	        Addresse = addresse;
	    }
	    
	    
	    
	    public boolean writing(String zielDatei) { // Schreibt die Werte in die Zieldatei
	        File file = new File(zielDatei);
	        FileWriter writer;
	        try {
	            writer = new FileWriter(file, true);
	            writer.write("BEGIN:VCARD");
	            
	            writer.write(System.getProperty("line.separator"));
	            writer.write("VERSION:3.0");
	            
	            writer.write(System.getProperty("line.separator"));
	            writer.write("N:"+this.getNachname()+";"+this.getVorname());
	            
	            writer.write(System.getProperty("line.separator"));	           
	            writer.write("FN:"+this.getVorname()+" "+this.getNachname());
	            
	            writer.write(System.getProperty("line.separator"));
	            writer.write("ORG:"+this.getOrganisation());
	            
	            writer.write(System.getProperty("line.separator"));
	            writer.write("URL:"+this.getURL());
	            
	            writer.write(System.getProperty("line.separator"));
	            writer.write("EMAIL;TYPE=INTERNET:"+this.getE_mail());  
	            
	            writer.write(System.getProperty("line.separator"));
	            writer.write("TEL;TYPE=voice,work,pref:"+this.getTelefon()+":");
	            
	            writer.write(System.getProperty("line.separator"));
	            writer.write("ADR;TYPE=intl,work,postal,parcel:;;"+this.getAddresse()+":");
	            
	            writer.write(System.getProperty("line.separator"));
	            writer.write("END:VCARD");
	            
	            writer.close();
	            return true;
	        } catch (IOException e) {
	            e.printStackTrace();
	            return false;
	        }
	    }
	}
 

youza

Erfahrenes Mitglied
Für den Fall das du wirklich direkt aus Excel lesen willst:
http://www.tutorials.de/java/305683-aus-eine-exceltabelle-lesen.html


Falls du aber nur eine leichtere Eingabe ermöglichen Willst würde ich einfach eine CSV machen die ist viel einfacher und ohne Externe Klassen zu lesen.

test.csv:
Code:
Nachname;Organisation;URL;E_mail;Telefon;Addresse;
Anton;Youza;666-666.de;666@666.de;666666666;str 6 Hölle;

Mit csv:
Java:
 public static void readFile(String path){
    	File file = null;
    	  FileReader freader = null;
    	  LineNumberReader lnreader = null;
    	  try{
	    	  file = new File("test.csv");
	    	  freader = new FileReader(file);
	
	    	  lnreader = new LineNumberReader(freader);
	    	  String line = "";
	    	  while ((line = lnreader.readLine()) != null){
	    		  if(lnreader.getLineNumber()!=1)
	    		  {
	    			  String [] temp = line.split(";");
	    			  vCard vc_temp = new vCard();
	    			  vc_temp.setVorname(temp[0]);
	    			  vc_temp.setNachname(temp[1]);
	    			  vc_temp.setE_mail(temp[2]);
	    			  vc_temp.setOrganisation(temp[4]);
	    			  vc_temp.setTelefon(temp[5]);
	    			  vc_temp.setAddresse(temp[3]);
	    		  }
	    	  
	    	  	}
	    	  freader.close();
	    	  lnreader.close();
  			} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
    	  } catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
   	  
    }
 
Zuletzt bearbeitet:

GreennoisOn

Mitglied
Nein, ich will damit direkt aus einer Excel-Tabelle lesen. Diese soll mit genau den gleichen Werten wie die, die bei per Konsole abgefragt werden gefüttert sein. Stelle mir das so vor, dass 10 verschiedene Profile in der Excel Tabelle sind und daraus dann 10 verschiedene vcf Dateien erstellt werden.
 

youza

Erfahrenes Mitglied
Hast du die Lösung überhaupt ausprobiert?
Eine CSV datei ist eine Excelliste allerdings eben eine die in Java sehr leicht zu interpretieren ist. Die Funktion die ich dir gepostet hab liest die Zeilen aus und erstellt für jede Zeile außer der Kopfzeile eine vcf Datei welche mit dem Vornamen_Nachnamen.vcf gekennzeichnet ist:
Java:
package org.youza.test; 
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
 
import org.youza.dto.vCard;
 
public class Starting {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
    	readFile("test.csv");
        System.out.println("finished!"); // Konsolenausgabe das der Vorgang fertiggestellt wurde
    }
    public static void readFile(String path){
    	File file = null;
    	  FileReader freader = null;
    	  LineNumberReader lnreader = null;
    	  try{
	    	  file = new File(path);
	    	  freader = new FileReader(file);
	
	    	  lnreader = new LineNumberReader(freader);
	    	  String line = "";
	    	  while ((line = lnreader.readLine()) != null){
	    		  if(lnreader.getLineNumber()!=1)
	    		  {
	    			  vCard vcard = new vCard();
	    			  String [] temp = line.split(";");
	    			  vcard.setVorname(temp[0]);
	    			  vcard.setNachname(temp[1]);
	    			  vcard.setE_mail(temp[2]);
	    			  vcard.setOrganisation(temp[3]);
	    			  vcard.setTelefon(temp[4]);
	    			  vcard.setAddresse(temp[5]);
	    			  if(vcard.writing(vcard.getVorname() + "_" + vcard.getNachname() + ".vcf") == false) /** Fehlerbehandlung */
	    	          {
	    				  freader.close();
	    		    	  lnreader.close();
	    	              return;
	    	          }
	    		  }
	    	  
	    	  	}
	    	 
	    	  freader.close();
	    	  lnreader.close();
  			} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
    	  } catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    }
    //Konsoleneingabe bzw. Abfrage
    public static void fillinvCard(vCard vcard){ 
        int count = 0;
        do{
          try {
              BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
 
             System.out.print("Vorname : ");
             vcard.setVorname(console.readLine());
             
             System.out.print("Nachname : ");
             vcard.setNachname(console.readLine());  
             
             System.out.print("E-mail : ");
             vcard.setE_mail(console.readLine());
             
             System.out.print("Adresse : ");
             vcard.setAddresse(console.readLine());
             
             System.out.print("Organisation : ");
             vcard.setOrganisation(console.readLine());
             
             System.out.print("Telefon : ");
             vcard.setTelefon(console.readLine());
             
             count = 3;
          } catch (Exception ex) {
            System.out.println("Fehlereingabe");
            count++;
            if(count == 3)
            {
              
            }
          }
        }while (count < 3);
    }
 
    }

Nochmal di e vCArd dazu:
Java:
package org.youza.dto;
 
//Importieren der Werte
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
 
//Hier werden die Eigenschaften der anderen Klasse abgefragt
public class vCard {
 
     private String Vorname;
        private String Nachname;
        private String Organisation;
        private String URL;
        private String E_mail;
        private String Telefon;
        private String Addresse;
        public String getVorname() {
            return Vorname;
        }
        public void setVorname(String vorname) {
            Vorname = vorname;
        }
        public String getNachname() {
            return Nachname;
        }
        public void setNachname(String nachname) {
            Nachname = nachname;
        }
        public String getOrganisation() {
            return Organisation;
        }
        public void setOrganisation(String organisation) {
            Organisation = organisation;
        }
        public String getURL() {
            return URL;
        }
        public void setURL(String uRL) {
            URL = uRL;
        }
        public String getE_mail() {
            return E_mail;
        }
        public void setE_mail(String e_mail) {
            E_mail = e_mail;
        }
        public String getTelefon() {
            return Telefon;
        }
        public void setTelefon(String telefon) {
            Telefon = telefon;
        }
        public String getAddresse() {
            return Addresse;
        }
        public void setAddresse(String addresse) {
            Addresse = addresse;
        }
        
        
        
        public boolean writing(String zielDatei) { // Schreibt die Werte in die Zieldatei
            File file = new File(zielDatei);
            FileWriter writer;
            try {
                writer = new FileWriter(file, true);
                writer.write("BEGIN:VCARD");
                
                writer.write(System.getProperty("line.separator"));
                writer.write("VERSION:3.0");
                
                writer.write(System.getProperty("line.separator"));
                writer.write("N:"+this.getNachname()+";"+this.getVorname());
                
                writer.write(System.getProperty("line.separator"));            
                writer.write("FN:"+this.getVorname()+" "+this.getNachname());
                
                writer.write(System.getProperty("line.separator"));
                writer.write("ORG:"+this.getOrganisation());
                
                writer.write(System.getProperty("line.separator"));
                writer.write("URL:"+this.getURL());
                
                writer.write(System.getProperty("line.separator"));
                writer.write("EMAIL;TYPE=INTERNET:"+this.getE_mail());  
                
                writer.write(System.getProperty("line.separator"));
                writer.write("TEL;TYPE=voice,work,pref:"+this.getTelefon()+":");
                
                writer.write(System.getProperty("line.separator"));
                writer.write("ADR;TYPE=intl,work,postal,parcel:;;"+this.getAddresse()+":");
                
                writer.write(System.getProperty("line.separator"));
                writer.write("END:VCARD");
                
                writer.close();
                return true;
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            }
        }
    }
und eine CSV datei:
Code:
Vorname;Nachname;E_mail;Organisation;Telefon;Addresse
Anton;Youza;666-666.de;666@666.de;666666666;str 6 Hölle
Paul;Youza;666-666.de;666@666.de;666666666;str 6 Hölle
Florian;Youza;666-666.de;666@666.de;666666666;str 6 Hölle
Seppel;Youza;666-666.de;666@666.de;666666666;str 6 Hölle
 

GreennoisOn

Mitglied
Ja, hat nur nicht geklappt. Habe jetzt noch folgende Fehlermeldungen:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at org.Green.test.Starting.readFile(Starting.java:38)
at org.Green.test.Starting.main(Starting.java:19)
 

youza

Erfahrenes Mitglied
Nach der Fehlermeldung schätze ich, dass etwas mit der CSV die du einliest nicht stimmt. Die hat wahrscheinlich eine Zeile ohne Werte oder mit nur einem Wert kannst du wie folgt abfangen:
Java:
if(lnreader.getLineNumber()!=1)
	    		  {
	    			  vCard vcard = new vCard();
	    			  String [] temp = line.split(";");
	    			  if(temp.length>=6)
	    			  {
		    			  vcard.setVorname(temp[0]);
		    			  vcard.setNachname(temp[1]);
		    			  vcard.setE_mail(temp[2]);
		    			  vcard.setOrganisation(temp[3]);
		    			  vcard.setTelefon(temp[4]);
		    			  vcard.setAddresse(temp[5]);
		    			  if(vcard.writing(vcard.getVorname() + "_" + vcard.getNachname() + ".vcf") == false) /** Fehlerbehandlung */
		    	          {
		    				  freader.close();
		    		    	  lnreader.close();
		    	              return;
		    	          }
	    			  }
	    		  }
Du kannst übrigens oben den ganzen Code kopieren des ist des ganze Projekt...
Des ist durchgetestet und funktioniert du brauchst nur in deinem Projekt ordner eine test.csv welche folgenden Aufbau hat wenn du es direkt in Excel erstellen willst:
Erste Zeile:
Vorname Nachname E_mail Organisation Telefon Addresse
und dann eben die Datensätze:
Anton Youza 666-666.de 666@666.de 666666666 str 6 Hölle

Sieht dann als CSV wie folgt aus:
Vorname;Nachname;E_mail;Organisation;Telefon;Addresse
Anton;Youza;666-666.de;666@666.de;666666666;str 6 Hölle
 
Zuletzt bearbeitet:

GreennoisOn

Mitglied
Hatte alles so gemacht wie beschrieben nur der Syntax Fehler kommt immer wieder auf:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Syntax error, insert "}" to complete Block

at org.Green.test.Starting.readFile(Starting.java:57)
at org.Green.test.Starting.main(Starting.java:19)
 

GreennoisOn

Mitglied
Wenn ich die aber setze kommt das hier raus:
java.io.IOException: Stream closed
at java.io.BufferedReader.ensureOpen(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.LineNumberReader.readLine(Unknown Source)
at org.patrick.test.Starting.readFile(Starting.java:32)
at org.patrick.test.Starting.main(Starting.java:19)
finished!
 

youza

Erfahrenes Mitglied
Strg + C:
Java:
package org.youza.test; 
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
 
import org.youza.dto.vCard;
 
public class Starting {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
    	readFile("test.csv");
        System.out.println("finished!"); // Konsolenausgabe das der Vorgang fertiggestellt wurde
    }
    public static void readFile(String path){
    	File file = null;
    	  FileReader freader = null;
    	  LineNumberReader lnreader = null;
    	  try{
	    	  file = new File(path);
	    	  freader = new FileReader(file);
	
	    	  lnreader = new LineNumberReader(freader);
	    	  String line = "";
	    	  while ((line = lnreader.readLine()) != null){
	    		  if(lnreader.getLineNumber()!=1)
	    		  {
	    			  vCard vcard = new vCard();
	    			  String [] temp = line.split(";");
	    			  if(temp.length>=6)
	    			  {
		    			  vcard.setVorname(temp[0]);
		    			  vcard.setNachname(temp[1]);
		    			  vcard.setE_mail(temp[2]);
		    			  vcard.setOrganisation(temp[3]);
		    			  vcard.setTelefon(temp[4]);
		    			  vcard.setAddresse(temp[5]);
		    			  if(vcard.writing(vcard.getVorname() + "_" + vcard.getNachname() + ".vcf") == false) /** Fehlerbehandlung */
		    	          {
		    				  freader.close();
		    		    	  lnreader.close();
		    	              return;
		    	          }
	    			  }
	    		  }
	    	  
	    	  	}
	    	 
	    	  freader.close();
	    	  lnreader.close();
  			} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
    	  } catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    }
    //Konsoleneingabe bzw. Abfrage
    public static void fillinvCard(vCard vcard){ 
        int count = 0;
        do{
          try {
              BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
 
             System.out.print("Vorname : ");
             vcard.setVorname(console.readLine());
             
             System.out.print("Nachname : ");
             vcard.setNachname(console.readLine());  
             
             System.out.print("E-mail : ");
             vcard.setE_mail(console.readLine());
             
             System.out.print("Adresse : ");
             vcard.setAddresse(console.readLine());
             
             System.out.print("Organisation : ");
             vcard.setOrganisation(console.readLine());
             
             System.out.print("Telefon : ");
             vcard.setTelefon(console.readLine());
             
             count = 3;
          } catch (Exception ex) {
            System.out.println("Fehlereingabe");
            count++;
            if(count == 3)
            {
              
            }
          }
        }while (count < 3);
    }
 }
Strg+V

Du verwendest doch Eclipse und ich mein die Fehlermeldung ist so eindeutig!
 

GreennoisOn

Mitglied
Ne, war ein anderer Fehler bei mir. Er hatte die Datei nicht gefunden, musste erst auf "C://test.csv"
ändern.

Vielen Dank!:)

Ich würde das ganze gerne noch um Profilbilder erweitern, klappt das?
 

GreennoisOn

Mitglied
Das habe ich, mir fehlt nur was davor kommen muss.



Package org.Green.test;

import java.io.FileWriter;
import java.io.IOException;

public class readimage {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
FileWriter fw = new FileWriter(f);
if ( encoding.toLowerCase().startsWith("base64") ) {
Base64Coder b64 = new Base64Coder();
byte[] decodedB;
char[] decodedC;
decodedB = b64.decode(attachement); // Dekodierung wird in Byte-Array gespeichert
decodedC = new char[decodedB.length];
for ( int d=0;d<decodedC.length;d++ ) {
decodedC[d] = (char)decodedB[d]; // Byte-Array wird in Char-Array umgeschrieben
}
fw.write( decodedC ); // FileWriter schreibt das CharArray
fw.close(); // und schließt sich
}
} catch ( IOException e ) {}

}

}
 

youza

Erfahrenes Mitglied
Mal als Ansatz mit CardMe:
Java:
package com.youza.test;

import java.io.File;
import java.io.IOException;
import java.io.Writer;
import java.io.*;

import info.ineighborhood.cardme.engine.VCardEngine;
import info.ineighborhood.cardme.io.VCardWriter;
import info.ineighborhood.cardme.util.Util;
import info.ineighborhood.cardme.vcard.EncodingType;
import info.ineighborhood.cardme.vcard.VCard;
import info.ineighborhood.cardme.vcard.types.PhotoType;
import info.ineighborhood.cardme.vcard.types.media.ImageMediaType;

public class CreateVCard {

	/**
	 * @param args
	 */
	private static VCardEngine vcardEngine = null;

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			File vcard_file = new File("petrea.vcf");
			System.out.println(vcard_file);
			vcardEngine = new VCardEngine();
			VCard vcard = vcardEngine.parse(vcard_file);

			PhotoType photo = new PhotoType();
			photo.setCompression(false);

			photo.setEncodingType(EncodingType.BINARY);

			photo.setImageMediaType(ImageMediaType.JPEG);


			byte[] tuxPicture1 = Util.getFileAsBytes(new File(
					"Hydrangeas.jpg"));

			photo.setPhoto(tuxPicture1);

			vcard.addPhoto(photo);
			saveToFile( "petreb.vcf" , vcard);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public static void saveToFile( String fileName , VCard vcard) {
	    Writer output = null;   
	    File file = new File(fileName);   
	    try {
	        output = new BufferedWriter(new FileWriter(file));
	        VCardWriter writer = new VCardWriter();
	        writer.setVCard(vcard);
	        output.write(writer.buildVCardString());  
	        output.flush();  
	        output.close(); 
	    } catch (IOException e) {
	        // TODO Auto-generated catch block
	        e.printStackTrace();
	    }   
	    }

}

@Edit hab im Moment leider etwas wenig Zeit schau heut abend nochmal drüber
 

youza

Erfahrenes Mitglied
ich kanns jetzt nicht testen ich glaub es gibt noch ein kleines Encoding problem zum einem hab ich den ersten teil so gelassen wie er war und der zweite Teil ist mit CardMe gemacht. Du musst natürlich noch einiges umstellen aber ich denke es ist ein Ansatz mit dem du arbeiten kannst.

Achja im Moment sind es 2 Main klassen also das musst du mindestens umändern.

Falls ich noch Zeit finde schau ich dass ich des noch ganz hinbekomme
Viele Grüße
Youza
 

Anhänge

  • vcard.zip
    250,5 KB · Aufrufe: 6

GreennoisOn

Mitglied
Super, vielen Dank. Versuche es hinzubekommen, das Encoding Problem hatte ich mit dem was ich versucht hatte auch schon.


Beste Grüße,
Green
 

youza

Erfahrenes Mitglied
habs dir nochmal umgestellt und verwende zum encoden den common Encoder von Apache ich häng dir des aktuelle Projekt nochmal an.

Das Programm wird jetzt auch nur noch aus der einer Main gestartet erstellet erst die vCards ohne Photo und fügt anschließend die Photos mit CardMe hinzu.

Grüße
Youza
 

Anhänge

  • vcard.zip
    1,4 MB · Aufrufe: 6

GreennoisOn

Mitglied
Ja, verwende Outklook, funktioniert jetzt alles, echt klasse gemacht.Ich danke dir vielmals, der Kasten wäre sicherlich 2x verdient.:D


Beste Grüße,
Green
 

Neue Beiträge

Forum-Statistiken

Themen
272.361
Beiträge
1.558.639
Mitglieder
187.834
Neuestes Mitglied
jordanx0206