Sofrendo para pegar o resultado de uma formula:

Bom dia a todos.
Bom, desde ontem eu estou tentando, mas não estou encontrando a solução.
É o seguinte:

       // Crio uma planilha
			HSSFSheet sheet = workbook.createSheet();
			// Crio uma linha na planilha
			HSSFRow row = sheet.createRow(0);
			// Crio a célula 0
			HSSFCell cell = row.createCell((short) 0);
			cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
			cell.setCellFormula("(6+5)");
			// QUERO O RESULTADO DA FORMULA

Então, eu seto a fórmula na célula.
ele não dah nenhum erro, seta normalmente. Mas eu preciso que me retorne o valor. Só que eu não encontrei nenhum método GET ou outro qualquer que me retorna o resultado.

Alguém sabe como resolver?

Abraços.

Acho que o POI não é um Excel completo, no sentido em que ele efetue os cálculos também. É só para criar ou obter dados de uma planilha.

(Se você precisa de um Excel completo e não pode pagar a licença, instale o OpenOffice e use o SDK do OpenOffice, que se não me engano tem interface Java também.)

http://jakarta.apache.org/poi/apidocs/org/apache/poi/hssf/usermodel/HSSFCell.html#getNumericCellValue()

Aqui não fala nada de recálculos etc. Então se você seta uma fórmula (uma string), só dá para recuperar uma fórmula (uma string), não o seu valor calculado.

Thingol, vlws pela ajuda.
=]
Tipo, eu preciso que realmente que eu obtenha o resultado da fórmula, sem gerar um arquivo xls.

Vc sabe se o JExcel, faz isso?

Abraços.

Parece que o POI tem classes para calcular o resultado de fórmulas.

http://jakarta.apache.org/poi/apidocs/org/apache/poi/hssf/usermodel/HSSFFormulaEvaluator.html

Você precisa, no entanto, de ver se isso realmente funciona.

Conheço o Bean Shell que pode te ajudar.


String r = new Interpreter().eval("(6+5)").toString();

Thingol. Muito obrigado.
=]
Vou testar aqui, mas parece que vai funcionar. Mais tarde eu posto aqui dizendo se deu certo ou não…

Vlws mais uma vez.

Opa…
:slight_smile:

Obrigado pela ajuda de tdos então.
Eu consegui fazer aqui.

              String texto = "(4+5)";
HSSFWorkbook workbook = new HSSFWorkbook();
			// Crio uma planilha
			HSSFSheet sheet = workbook.createSheet("nomePlanilha");
			CellReference cellReference = new CellReference("A1");
			// Crio uma linha na planilha
			HSSFRow row = sheet.createRow(cellReference.getRow());
			// Crio a célula 0
			HSSFCell cell = row.createCell(cellReference.getCol());
			cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
			cell.setCellFormula(texto);
			HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(sheet, workbook);
			//			 suppose your formula is in B3
			try{

			evaluator.setCurrentRow(row);
			HSSFFormulaEvaluator.CellValue cellValue = evaluator.evaluate(cell);
			System.out.println(cellValue.getNumberValue());

Se alguém quiser saber como foi… Taí…

Abraços.

É claro que se o OP (Original Poster) quer apenas calcular uma fórmula o melhor seria ter seguido a sugestão do “hashcode”, que é usar o BeanShell.

(Se alguém olhar seu programa e descobrir que você cria uma planilha em memória só para calcular 4 + 5 vai lhe dar um esculacho daqueles :frowning: )

Eu sei.
Mas eu coloquei aí desta forma, só pra mostrar como faz pra usar o HSSFFormula…
no meu caso aqui é mais complicado.
=]
Obrigado.