2013-07-29 18 views
9

Sto usando il POI apache per cambiare le celle in un foglio Excel. Dopo aver modificato i valori, le celle con le formule corrispondenti alle celle che sono state modificate non si aggiornano.Formula Excel non aggiornando la cella

Quando esco in Excel e clicco sulla cella con la formula, e poi clicco sulla barra delle funzioni, la formula si aggiorna.

Ho le opzioni di calcolo impostate per l'aggiornamento automatico.

Esempio rapido.

Row:

[A2 + A3] [1] [2]

A1 qui sarebbe uguale 3

Quando cambio utilizzando POI:

[A2 + A3] [2] [5]

A1 equivale ancora a 3 finché non faccio clic su quella cella.

Anche l'aggiornamento del foglio di lavoro o del foglio non funziona. Si tratta di un problema con Excel o PDI? Qualcuno può pensare a una soluzione alternativa?

+0

La tua domanda non è chiara. Descrivi l'esatta sequenza di operazioni, inclusa l'apertura e la chiusura del foglio di lavoro in Excel. Stai facendo i seguenti passi? 1) Crea il foglio di lavoro; 2) Chiudi Excel; 3) Esegui il tuo programma Java; 4) Riapri il foglio di lavoro in Excel? In caso contrario, descrivi ESATTAMENTE quello che fai. –

+2

Gli altri hanno risposto senza tale descrizione, e tale descrizione è un po 'irrilevante in questa situazione. – PandaBearSoup

risposta

20

Se stai usando le cartelle di lavoro XSSF, è possibile rivalutare tutte le cellule formula come segue:

XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook) 

Un'API simile esiste se si sta utilizzando una cartella di lavoro HSSF:

HSSFFormulaEvaluator.evaluateAllFormulaCells(workbook) 

Oppure, a seconda esattamente di come sei configurato e di cosa stai cercando di ottenere, dovresti riuscire a trovare la tua soluzione here

+0

Sì, questo è ciò che è stato utilizzato come soluzione temporanea quando ho notato il problema.Mi chiedo di più perché Excel non aggiorni le celle automaticamente, non solo quando faccio clic su di esse. Anche il rinfresco della cartella di lavoro dovrebbe funzionare. Sembra un insetto. Accetterò questa risposta poiché risolve tecnicamente il problema di root. – PandaBearSoup

+1

@PandaBearSoup La sezione [Perché valutare formule] (http://poi.apache.org/spreadsheet/eval.html#WhyEvaluate) della documentazione POI di Apache spiega perché è necessario farlo, suggerirei di leggere attentamente – Gagravarr

2

È necessario attivare esplicitamente un ricalcolo. Vedere la sezione di ricalcolo delle formule here sul motivo per cui & come farlo.

9

Nel caso in cui il tuo foglio abbia qualche formula per dire A3=sum(A1:A2) viene calcolata e si sta lavorando bene con A1=5, A2 =4. Ora se cambiare il valore di A2 con 2 piace

sh.getRow(0).getCell(0).setCellValue(2); // imposta A1 = 2 ed eseguire un'operazione di scrittura, controllare il valore della A3 è ancora visibile 9 Sembra sbagliato ma non lo è. Il punto è che Excel memorizza nella cache i risultati precedentemente calcolati ed è necessario attivare il ricalcolo per aggiornarli.

wb.getCreationHelper().createFormulaEvaluator().evaluateAll(); o con

wb.setForceFormulaRecalculation(true); e quindi eseguire l'operazione di scrittura. Questo ti darà il risultato corretto. Per dettagli check here

+1

Bel lavoro di copia-incolla. –

+0

Non ho una reputazione sufficiente per pubblicare il commento per la soluzione di cui sopra. Quindi ho incollato la soluzione. – nilamber

+0

grazie mille !!! wb.setForceFormulaRecalculation (true); => ha funzionato come un fascino per me! –

Problemi correlati