# JExcel: Zellen mit Formeln auslesen



## schneeangel (26. Januar 2009)

Hallo,

 ich habe ein Problem, vielleicht könnte mir jemand helfen.

 Ich habe eine Excel Tabelle, die mir eine Funktion berechnet. Die erste Spalte enthält Input-Daten, die ich ändern kann und die zweite Spalte die Output-Daten, die ich ablesen sollte. Die zweite Spalte enthält eine Formel,  die meine Funktion automatisch berechnet. Wenn ich die Daten in die erste Spalte schreibe (funktioniert einwandfrei) und danach das Ergebnis aus der zweiten Spalte auslese, erhalte ich nicht die aktuelle Daten, sondern die vorherigen. Wenn ich aber die Datei mit Excel aufmache, sehe ich die richtigen Ergebnisse. Bei der Schließung der Datei kommt eine Meldung: "Möchten Sie die vorgenommenen Änderungen in Datei.xls speichern? Formeln, die mit einer früheren Version  von MS Excel gespeichert wurden, werden beim Öffnen der Datei neu berechnet". Wenn ich "JA" sage und danach wieder die Lese-Methode aufrufe, nur dann kriege ich die richtigen Ergebnisse. Der Hacken ist wahrscheinlich bei der Zellen mit der Formeln, sie werden nicht mit der write()-Methode gespeichert. Weißt jemand vieleicht, wie man das lösen kann. Im Voraus vielen Dank


----------



## Clash (27. Januar 2009)

Bitte mal den Code posten, sonst kann man relativ wenig dazu sagen...


----------



## schneeangel (27. Januar 2009)

Ausschnitt aus der Methode für excelSchreiben:

```
Workbook workbook = Workbook.getWorkbook(new File("H:\\file.xls"));
WritableWorkbook copy = Workbook.createWorkbook(new File ("H:\\file.xls"),workbook);
WritableSheet sheet_wr =  copy.getSheet(0);
WritableCell cell_input = sheet_wr.getWritableCell(0,1);
Number n = (Number) cell_input;
n.setValue(20);

copy.write();
copy.close();
workbook.close();
```

Ausschnitt aus der Methode für excelLesen:

```
Workbook workbook = Workbook.getWorkbook(new File("H:\\file.xls"));
Sheet sheet =  workbook .getSheet(0);
Cell cell_output = sheet.getWritableCell(1,1);
System.out.println(cell_output.getContents());  // hier kommt falsches Ergebnis raus (Formel wird nicht neu berechnet)
workbook.close();
```


file.xls ist ganz einfach: 
A1= x         (cell_input)
B1=A1-1   (cell_output)


----------



## Clash (28. Januar 2009)

Hi,
ja ich denke der fehler liegt bei der interpretation der formeln wie du schon richtig vermutet hast. ich weiss nicht ob die JExcel API Formeln unterstützt, aber ich habe mal mit der apache POI api gearbeitet und die kann auf jeden fall formeln interpretieren und schreiben. kannst es ja mal damit probieren, ist ebenso einfach zu benutzen wie die JExcel API (zumindest so weit wie ich das hier sehen kann )
hier der link
http://poi.apache.org/spreadsheet/index.html


----------



## schneeangel (28. Januar 2009)

Vielen Dank für die Antwort. 
Ich denke, das es doch an Excel liegt und zwar an der Neuberechnung der Formeln. 

Das steht in der Excel-Hilfe:
*Neuberechnen von Arbeitsmappen, die in früheren Versionen von Excel erstellt wurden*
_Um sicherzustellen, dass ältere Arbeitsmappen korrekt berechnet werden, verhält sich Excel beim ersten Öffnen einer alten Arbeitsmappe anders als beim Öffnen einer Arbeitsmappe, die mit der aktuellen Version erstellt wurde.

Wenn Sie eine Arbeitsmappe öffnen, die in der aktuellen Version erstellt wurde, berechnet Excel nur die Formeln neu, die Abhängigkeiten von geänderten Zellen aufweisen.

Wenn Sie in eine Arbeitsmappe öffnen, die mit einer früheren Version von Excel erstellt wurde, werden alle Formeln in der Arbeitsmappe neu berechnet, gleichgültig, ob die Formeln von geänderten Zellen abhängen oder nicht. Dadurch wird sichergestellt, dass die Arbeitsmappe vollständig für die aktuelle Version von Excel optimiert wird.

Da die vollständige Neuberechnung mehr Zeit beanspruchen kann als eine teilweise Neuberechnung, kann das Öffnen einer Arbeitsmappe, die zuvor nicht in der aktuellen Version von Excel gespeichert wurde, länger als gewöhnlich dauern. Nach dem Speichern der Arbeitsmappe in der aktuellen Version erfolgt das Öffnen schneller._


----------

