He encontrado la solución. El Excel tiene una especie de caché que almacena información necesaria para las fórmulas. Cuando se lee un archivo Excel importado desde otro programa, esa caché está vacía.
Para que ejecute la Excel habría que realizar lo siguiente:
XSSFWorkbook libro = new XSSFWorkbook (fileIn);
libro.getCreationHelper().createFormulaEvaluator().evaluateAll();
evaluateAll() se encarga de rellenar la caché, de forma que ahora cuando se lean las celdas que contienen la fórmula se obtiene el resultado esperado.
Hola a todos.
Tengo un problema con la lectura de campos numéricos que se obtienen a través de una fórmula.
Tengo una clase java que se encarga de leer un fichero Excel 2007 exportado desde otro programa usando XSSF. Los campos de tipo texto y de tipo numérico los recoge correctamente. Sin embargo, cuando trato de recoger un campo que contiene una fórmula me devuelve siempre 0.00, aun cuando en el Excel se recoge perfectamente. A continuación muestro código donde realizo la operación.
if(filaPartida.getCell(10).getCellType()== XSSFCell.CELL_TYPE_NUMERIC || filaPartida.getCell(10).getCellType()==XSSFCell.CELL_TYPE_FORMULA){
Number dnumUnidades=filaPartida.getCell(10).getNumericCellValue();
......
}
Nota: filaPartida es una fila de tipo XSSFRow.
También he probado con lo siguiente. (sustituyendo al código anterior)
if(filaPartida.getCell(10).getCellType()== XSSFCell.CELL_TYPE_NUMERIC || filaPartida.getCell(10).getCellType()==XSSFCell.CELL_TYPE_FORMULA){
Number dnumUnidades=evaluator.evaluateInCell(filaPartida.getCell(10)).getNumericCellValue();
En este caso, me devuelve un valor, pero no obtiene el valor correcto.
Lo más curioso de todo, y esto es lo que me desconcierta, es que si abro el Excell del que quiero recuperar los datos y le doy a guardar, cuando vuelvo a ejecutar la clase recupera los datos correctamente.
¿Alguien me puede indicar a qué se debe ésto y cómo se podría solucionar?
Muchas gracias por adelantado.