Apache POI (Excel) - Probleme mit Zahlenformat

Tinga

Mitglied
Hallo Experten,


ich habe wieder einmal ein kleines Problem und bin mit der Suchfunktion nicht auf etwas wirklich Hilfreiches für mich gestoßen.

Ich habe eine GUI mit u. a. vielen JTextFields. Durch Betätigen eines Buttons werden die eingegebenen Werte eingelesen und in eine Excel-Datei geschrieben. In dem Zusammenhang arbeite ich mit Apache POI.

Problematisch ist, dass auch Zahlen eingegeben (integer und double – Eingaben von PLZ bis Länge in Meter (z. B. 5,92 m) sollen möglich sein) werden. Mit diesen kann in Excel zwar weitergerechnet werden. Allerdings sind die Zellen standardmäßig als Text formatiert und an der jeweiligen Zelle befindet sich ein gelbes Ausrufezeichen, das exakt das moniert. Mein Ziel ist, dass man diese Zahlen von der Formatierung her nicht von denen von Hand (ich möchte nichts von Hand eintragen, mir geht es ums Prinzip) unterscheiden kann.
Die relevanten Codeausschnitte:
[JAVA=42]
public JTextField getLängeField()
{
return längeField;
}
[/code]

[JAVA=42]
String länge = getLängeField().getText();
//double l = (String)länge;
[/code]

[JAVA=42]
HSSFCell cell4 = row.createCell(4); //soll Zelle in Spalte 4 erstellen
//cell4.setCellType(Cell.CELL_TYPE_NUMERIC);

//HSSFCellStyle cellStyle = workbook.createCellStyle();
//cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0"));
//cell4.setCellStyle(cellStyle);
cell4.setCellValue(länge); //Wert der gesetzt werden soll.
[/code]


Wie man sieht habe ich schon Einiges erfolglos probiert. Mit dem Versuch über CellStyle (die Idee habe ich hier aus dem Forum) habe ich immerhin hinbekommen, dass die Zelle in Excel nicht mehr das Format „Standard“ sondern „Zahl“ hat. Ansonsten hat sich aber nichts geändert. Muss noch dazu sagen, ich bin Anfänger und die Infoseiten von Apache haben mir nicht geholfen.

Busy Developers' Guide to HSSF and XSSF Features

Könnt ihr mir weiterhelfen? Ich nutze Excel 2007 falls das noch von Interesse ist. Bei Bedarf kann ich auch den kompletten Code posten.


Frohe Ostern & vielen Dank an Euch.
 
Hallo Tinga,

probiere das mal so aus:
Java:
double länge = Double.parseDouble(detailsPanel2.getLängeField().getText().replace(",", "."));
double breite = Double.parseDouble(detailsPanel2.getBreiteField().getText().replace(",", "."));
double höhe = Double.parseDouble(detailsPanel2.getHöheField().getText().replace(",", "."));
double fläche = Double.parseDouble(detailsPanel2.getFlächeField().getText().replace(",", "."));
double volumen = Double.parseDouble(detailsPanel2.getVolumenField().getText().replace(",", "."));

HSSFCell cell4 = row.createCell(4); //soll Zelle in Spalte 4 erstellen
cell4.setCellValue(länge); //Wert der gesetzt werden soll.
HSSFCell cell6 = row.createCell(6); //soll Zelle in Spalte 6 erstellen
cell6.setCellValue(breite); //Wert der gesetzt werden soll.
HSSFCell cell8 = row.createCell(8); //soll Zelle in Spalte 8 erstellen
cell8.setCellValue(höhe); //Wert der gesetzt werden soll.
HSSFCell cell10 = row.createCell(10); //soll Zelle in Spalte 10 erstellen
cell10.setCellValue(fläche); //Wert der gesetzt werden soll.
HSSFCell cell11 = row.createCell(11); //soll Zelle in Spalte 11 erstellen
cell11.setCellValue(volumen); //Wert der gesetzt werden soll.
Wenn du den Zellen einen String zum Speichern gibst, dann haben die Zellen diesen Typen verinnerlicht.
Gib ihnen die Inhalte im richtigen Format, dann sollte alles von selbst funktionieren.
 
Zuletzt bearbeitet:
Hallo FetterOtter,


Ich habe das mit einem Typ Casting versucht, was Du mit Parsen gemacht hast. Ich kenne zwar auch das Parsen, aber ich dachte damit hätte ich auch ein Double. Naja.

Zum Glück gibt es Dich. Vielen Dank.

Ich habe übrigens wieder Uni und kann deswegen nicht sofort antworten aber ich melde mich sobald ich dazu gekommen bin Deinen Code auszuprobieren.


Viele Grüße,
Tinga
 

Zurück
Oben