Pregunta

Estoy intentando usar POI XSSF para evaluar algunas fórmulas de Excel. No es necesario guardar los valores y es posible que tenga que calcular muchas fórmulas, así que intento hacerlo todo en la misma celda.

El problema es que el valor de la celda parece atascarse en la primera fórmula ingresada incluso después de recalcular

FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
XSSFCell formulaCell = row.createCell(6);
formulaCell.setCellFormula("Date(2011,10,6)");
CellValue cellValue = evaluator.evaluate(formulaCell);
System.out.println(cellValue.getNumberValue());

formulaCell.setCellFormula("Date(1911,3,4)");
cellValue = evaluator.evaluate(formulaCell);
System.out.println(cellValue.getNumberValue());

Esto genera 40822.0 40822.0 (Excel equivalente al 6/10/2011) en ambas ocasiones en lugar de reevaluar a la nueva fórmula.

¿Fue útil?

Solución

Si usa formulaEvaluator más de una vez, necesita esta línea entre usos o, de lo contrario, usa el mismo resultado cada vez.

formulaEvaluator.clearAllCachedResultValues()

Otros consejos

El FormulaEvaluator almacena en caché los valores calculados de la celda para acelerar el procesamiento.Si realiza actualizaciones de celda después de crear el evaluador, ¡debe informarlo!

Consulte la documentación de FormulaEvaluator para obtener más informacióndetalles.En su caso, pruebe:

formulaCell.setCellFormula("Date(1911,3,4)");
evaluator.notifySetFormula(formulaCell);
cellValue = evaluator.evaluate(formulaCell);
System.out.println(cellValue.getNumberValue());

Puede seguir los siguientes pasos para realizar su trabajo.Estas son dos soluciones de las que puede hacer uso de cualquier función.Evalúa el libro de trabajo completo para que se evalúe cualquier fórmula que use.Espero que esto ayude.

1) evaluador.evaluateAll (); 2) XSSFFormulaEvaluator.evaluateAllFormulaCells (wb);

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top