Hallo alle zusammen,
hab ein problem mit meinem Code.
Also hier einen kurze Erklärung zu meinem Problem. Ich will mit meinen Programm eine Spalte aus einer Excel Datei auslesen, inder Namen stehen die auch mehrfach aufgeführt sind, diese Namen sollen gezählt werden und dann letztendlich nach Programm durchlauf ausgegeben werden. (zb: 13xZimmerman, 8xMaier, 18xTobias,etc)
Dies funktioniert bei meinem Programm schon ohne Probleme auch schon die Ausgabe in eine Excel Datei.
So und jetzt zu meinem Problem. ich wil die ausgelesenen Werte mit Namen in eine Reihenfolge bringen, sozusagen das die Namen nach der Anzahl der Vorkommnisse sortiert wird. egal ob absteigend oder aufsteigend. (Die liste der Namen wächst stetig und es kommen auch immer neue namen dazu, sodass sich die reihenfolge der eingelesen Namen stetig ändern wird.
Ich habe es schon mit einer JTable probiert aber, aber dann hab ich mir das ganze prog geschossen
also ich hoffe das mir jemand von euch helfen kann und mir evtl sogar schon den verbesserten code posten kann.
thx benni
public class NameCounter
{
private String name;
private int counter;
/**
* Konstruktor
*/
public NameCounter(String name)
{
this.name = name;
this.counter = 1;
}
/**
* Erhöht den Namenzähler
*/
public void setCounterUp()
{
this.counter++;
}
/**
* Gibt den Namen zurück.
*
* @return {@link String}
*/
public String getName()
{
return name;
}
/**
* Gibt die Anzahl der gezählten Namen zurück.
*
* @return {@link Integer}
*/
public int getCounts()
{
return counter;
}
}
Alles anzeigen
import java.io.File;
import java.io.IOException;
import java.util.Vector;
import java.util.Date;
import jxl.*;
import jxl.write.*;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import java.io.*;
import java.lang.*;
import jxl.write.Number;
public class ExcelTest
{
// Initialisieren der globalen Variablen
public String path = "//java/test/namen.xls";
public Workbook workbook = null;
public Vector<NameCounter> nameVector = new Vector<NameCounter>();
//private Vector <NameCounter> nameVector = new Vector();
/**
* Programm starten.
*/
public void start()
{
// Abfangen der Exceptions
try
{
// Einlesen der Datei
this.workbook = Workbook.getWorkbook(new File("//java/test/namen.xls"));
}
catch (BiffException e)
{
System.out.println("BiffException" + e.getMessage());
}
catch (IOException e)
{
System.out.println("IOException" + e.getMessage());
}
// Tabelle initialisieren
Sheet sheet = this.workbook.getSheet(0);
// Erstellen der Zellenobjekte
String cellText;
NameCounter nameCounter;
// Die zu durchsuchende Spalte und Startzeile initialisieren
int suchSpalte = 4;
int startZeile = 7;
// Schleife für Zellenüberprüfung
for (int i = startZeile; i < sheet.getRows(); i++)
{
// Einlesen der Zellen in die String-Variablen
cellText = sheet.getCell(suchSpalte, i).getContents().trim();
nameCounter = isNameInVector(cellText);
if (nameCounter == null)
{
if (!cellText.equals(""))
{
this.nameVector.add(new NameCounter(cellText));
}
}
else
{
nameCounter.setCounterUp();
}
}
try{
WritableWorkbook workbook1 = Workbook.createWorkbook(new File("//java/test/ausgabe13.xls"));
WritableSheet sheet1 = workbook1.createSheet("meop2", 2);
// Schleife für die Konsolenausgabe
for (int i = 0; i < this.nameVector.size(); i++)
{
nameCounter = this.nameVector.elementAt(i);
System.out.println(nameCounter.getName() + ": " +" \t "+ nameCounter.getCounts());
Label label = new Label(3, (i+5),nameCounter.getName() + ": " );
sheet1.addCell(label);
Number number = new Number(6, (i+5), nameCounter.getCounts());
sheet1.addCell(number);
}
workbook1.write();
workbook1.close();
}
catch (Exception e) {
System.out.println("Exception: " + e.getMessage());
}
}
/**
* Überprüfen ob der Name bereits im Vector vorhanden ist.
*/
public NameCounter isNameInVector(String name)
{
NameCounter nameCounter = null;
NameCounter nameCounterTest;
for (int i = 0; i < nameVector.size(); i++)
{
nameCounterTest = nameVector.elementAt(i);
if (nameCounterTest.getName().equals(name))
{
nameCounter = nameCounterTest;
break;
}
else
{
nameCounter = null;
}
}
return nameCounter;
}
/**
* Mainmethode
*/
public static void main(String[] args)
{
new ExcelTest().start();
}
}
Alles anzeigen
die API zum Excel-File auslesen gibts hier: falls ihr sie benötigt http://jexcelapi.sourceforge.net/resources/java…docs/index.html
und im anhang findet ihr die namensdatei
thx benni