Ir para o conteúdo
YmouseY

Utilização do Excel em Java

Mensagens Recomendadas

YmouseY

Boa tarde, estou a iniciar na programação, e estou a criar um programa que dada uma determinada Folha de calculo do Excel. Introduzindo uma linha, à escolha do utilizador, o que o programa faz é apresentar toda a restante informação contida nessa linha (as restantes colunas). Tudo aquilo que não usa formulas eu consigo fazer aparecer no meu JAva Eclipse, mas todos os outros campos que contenham formulas, o output apresentado é a formula do Excel. Eu como quero que apareça o resultado da formula e não, a formula em si, o que tenho que fazer para conseguir isso? Alguém me pode ajudar, por favor? Não sei se é importante referir que usei a biblioteca APACHE-POI-3.9 para conseguir mexer nas celulas do Excel.

Desde já obrigado.

Cumprimentos

Editado por Rui Carlos
Título editado (ver regras relativas à "urgência").

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jpfelgueiras

Em vez do APACE-POI podes usar o jxl

usando o jxl Cell.getContents() e NumberCell.getValue() retornam o valor.

usando FormulaCell.getFormula() retorna a formula.

no caso de ser obrigatório o uso do POI vais ter de calcular a formula ( o que e bastante chato se não tiveres ideia de que tipo de formula te vai aparecer)

espero ter ajudado :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ernest Duarte

Bom dia,

Não é por meter no título "ajuda urgente" que a resposta vai aparecer mais rapidamente...

Etapa -1 : JDK 1.7_25 (o mais recente possível) e o Eclipse Kepler

Etapa 0 : Eu utilizo LibreOffice e Apache OpenOffice são gratuitos e Open Source: https://www.libreoffice.org/

Etapa 1 : Apache POI - the Java API for Microsoft Documents : http://poi.apache.org/

Etapa 2 : Apache POI - Download : poi-bin-3.9-20121203.zip (ou equivalente)

Etapa 3 : criar um directory lib/ no projeto Eclipse Kepler e meter dentro o ficheiro poi-3.9-20121203.jar (ou equivalente)

Etapa 4 : fazer um click direito no projeto Eclipse Kepler e ir no Java Build Path / Libraries fazer Add JARs... do ficheiro JAR visto na etapa 3

Etapa 5 : criar uma classe Java : TestPOI_Formula.java

Meter este Exemplo no ficheiro TestPOI_Formula.java :

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class TestPOI_Formula {

 public static void main( String[] args) {

   HSSFWorkbook wb = new HSSFWorkbook();
   HSSFSheet sheet = wb.createSheet("minha  Folha XLS");
   HSSFRow row = sheet.createRow(0);
   HSSFCell cell = null;
   cell = row.createCell((short) 0);
   cell.setCellValue(10);
   cell = row.createCell((short) 1);
   cell.setCellValue(20);
   cell = row.createCell((short) 2);
   cell.setCellValue(30);
   cell = row.createCell((short) 3);
   cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
   cell.setCellFormula("SUM(A1:C1)");
   FileOutputStream fileOut;
   try {
  fileOut = new FileOutputStream("meuficheiro.xls");
  wb.write(fileOut);
  fileOut.close();
   } catch (FileNotFoundException e) {
  e.printStackTrace();
   } catch (IOException e) {
  e.printStackTrace();
   }
 }
}

Etapa 6 : click direito no ficheiro e depois : Run as -> Java Application

Etapa 7 : fazer um F5 (refresh) e o ficheiro vai aparecer no projeto Eclipse com a valor da formula

Etapa 8 : verifique abrindo o ficheiro com o LibreOffice Calc que 10 + 20 + 30 = 60

Existem muitas outras soluções para trabalhar com o XLS com JAVA :

Java Excel API - A Java API to read, write, and modify Excel spreadsheets

http://jexcelapi.sourceforge.net/

Mas o Apache POI é muito potente

Cordialmente

Ernest Duarte

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ernest Duarte

Bom dia,

Para ler um documento, use a classe POIFSFileSystem. Um dos construtores desta classe espera em parâmetro um objeto do tipo InputStream que envolve um fluxo para ler o documento.

A classe HSSFSheet fornece o método rowIterator() que retorna um tipo de objeto iterator que permite que você navegue as linhas da folha.

Para obter um dado, é melhor ter certeza do tipo de dados associado à célula usando o método getCellType ().

O getNumericCellValue() e getRichStringCellValue() métodos de classe HSSFCell para obter o valor da célula de acordo com seu tipo.

O setCellType () método HSSFCell classe permite que você especifique o tipo de conteúdo da célula (CELL_TYPE_BLANK, CELL_TYPE_BOOLEAN, CELL_TYPE_ERROR, CELL_TYPE_FORMULA, CELL_TYPE_NUMERIC, CELL_TYPE_STRING)

Vários sobrecargas do método setValue () da classe HSSFCell pode fornecer o valor da célula.

GET é para ler e SET é para escrever ...

Cordialmente

Ernest Duarte

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
YmouseY

Bom dia, desde já quero agradecer as respostas rápidas.

Ernest coloquei o titulo dessa forma porque realmente tenho urgência em obter respostas e resultados.. Se isso lhe irritou de alguma forma, peço desculpa. Quanto ao tuturial que apresentou, eu tenho o programa e já tenho a biblioteca importada e já consigo ler dados, e escrever (coisa que de momento não me interessa). O problema real que tenho é todas as células que não contenham formulas eu consigo fazer o output sem qualquer problema (estou a usar o HSSFCell nColuna = linha.getCell(i)), mas todas as celulas que contenham formulas o output apresentado é a formula em si, deixo um exemplo que aparece:

("=CONCATENAR(SE(AO4<>"Sim";"";CONCATENAR($AO$2;" - "));SE(AP4<>"Sim";"";CONCATENAR($AP$2;" - "));SE(AM4<>"Sim";"";CONCATENAR($AM$2;" - "));SE(AF4<>"Não";"";)

Mas o que eu pretendo no meu output é o resultado da formula e não a formula em si.

jpfelgueiras, vou importa essa biblioteca e vou tentar com esses metodos.

Mais uma vez, obrigado pelas respostas.

Cumprimentos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ernest Duarte

Bom dia,

Você esperimentou com o HSSFFormulaEvaluator ?

HSSFWorkbook wb = new HSSFWorkbook();

HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);

...

fe.clearAllCachedResultValues();

...

HSSFCell cell ...

...

CellValue cv = fe.evaluate(cell);

...

cv.getNumberValue()

...

fe.evaluate(cell).getStringValue();

Cordialmente

Ernest Duarte

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
YmouseY

Boas, já consegui resolver o problema. Tive que criar uma linha de código para reconhecer o tipo de celula, se String ou inteiro. Depois de feito isso, se fosse string bastou usar o codigo "getStringCellValue()"

Caso fosse inteiro, usar este codigo "nColuna.getNumericCellValue()"

Desta forma, o meu problema está resolvido, agradeço novamente a quem respondeu e tentou ajudar.

Obrigado

Cumprimentos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.