HSSF - schreiben in und lesen aus vorhandener Datei

joergh

Aktives Mitglied
Hallo zusammen,

ich habe eine vorgegebene Excel-Tabelle. Zwei Eingabefelder und ein Ausgabefeld, das (aus vereinfachungsgründen) die Inhalte der beiden Eingabefelder multipliziert. Diese komplizierte Berechnung möchte ich nicht in Java schreiben, sondern in Excel, weils da schon funktioniert. Die Eingabewerte sollen über Java in die Datei geschrieben werden, der Ausgabewert von Java ausgelesen und zurückgegeben werden.
Das Schreiben scheint schon zu funktionieren, zumindest kann ich die entsprechenden Zellen wieder auslesen und kriege die reingeschriebenen Werte.
Sind beide Werte reingeschrieben, möchte die das berechnete Produkt aus der Ausgabezelle wieder auslesen, klappt aber nicht. Ich kriege eine 0, als wäre nie etwas reingeschrieben worden. Öffne ich anschließend die Datei, steht auch nichts drin (wobei das egal ist, solange ich das richtige Ergebnis in Java kriege).

Hier nun mein Quellcode. Was da letztlich scheitert bzw. fie falsche Ausgabe ist die drittletzte Ausgabe.

Java:
excelFile = new File("flaechenberechnung.xls");

            fis = new FileInputStream(excelFile);
            tmpByteArrayOutputStream = new ByteArrayOutputStream();
            hwb = new HSSFWorkbook(fis);
            hsheet = hwb.getSheet("Tabelle1");
            
            hrow = hsheet.createRow((short)0);
            hcell = hrow.createCell(1);
            hcell.setCellValue(5);
            System.out.println("** "+hcell.getNumericCellValue());  //-> kommt wieder 5 raus
            int rowCol2[] = cell2RowAndColumn("B2"); // [0] = row, [1] column
            
            hrow = hsheet.createRow((short)1);
            hcell = hrow.createCell(1);
            hcell.setCellValue(5);
            
            hwb.write(tmpByteArrayOutputStream);
            tmpByteArrayOutputStream.close();
            
            int rowCol[] = cell2RowAndColumn(zelle); // [0] = row, [1] column
            hrow = hsheet.getRow((short)2);
            hcell = hrow.getCell(1);

            System.out.println(hcell.getNumericCellValue());
            fis.close();
          
            tmpByteArrayOutputStream.close();

Findet jemand meinen Fehler? Ich wäre schon sehr dankbar!
j.
 
Zuletzt bearbeitet von einem Moderator:
kannst du denn etwas aus einem Formel-Feld herauslesen, wenn initial schon Werte vorgegeben sind?
wenn ja, dann hilft möglicherweise, nach dem Speichern in Zeile 19 das Excel komplett neu einzulesen
 
Hallo!
also ich kann das ausgabefeld auslesen und erhalte immer das ergebnis von den faktoren, die ich direkt in excel eingegeben habe.
neu oeffnen klappt leider nicht, da er die eingaben nicht speichert.
frage: im inputstream steht doch die alte datei und im outputstream die neuen daten, richtig. (wie) kann ich den input in den output schreiben und das ganze in eine neue datei schreiben, die die alte ueberschreibt. Klappt da so? Oder hat noch jemand einen einfacheren weg?
danke und gruss
j.
 
tmpByteArrayOutputStream speichert nicht auf die Festplatte, da kann sich ja auch nichts ändern, du brauchst einen FileOutputStream,
allerdings bezweifle ich inzwischen ein wenig dass nur davon die Formeln berechnet werden,
wenn Excel das zwischendurch öffnet vielleicht, allerdings wird da ja auch nicht unbedingt gespeichert,
evtl. genauso beim nächsten Einlesen ins Java, na muss man alles testen
 
Da scheint eins der Probleme zu sein: Ich hab mir mal den ByteArrayOutputStream als xls ausgeben lassen:
B1: 5
B2: 5

B3: B1*B2, Ergebnis: 16 (da früher B1=B2=4)
B3 ändert sich erst, wenn man in die Zelle klickt und Enter drückt. Gibts da nen Befehl?
 
Super Link!

Hiermit klappts:

Java:
HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(sheet, wb); 
evaluator.evaluateFormulaCell(c);

Damit wird die Zelle ausgewertet und man kann das Ergebnis abrufen! Juhu!
 

Zurück
Oben