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…
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 )
Eu sei.
Mas eu coloquei aí desta forma, só pra mostrar como faz pra usar o HSSFFormula…
no meu caso aqui é mais complicado.
=]
Obrigado.