Quero passar um documento excel(xls) para java e depois pesquisar nesse documento

Ola bom dia consegui converter o documento excel para java, mas queria armazena lo num array e depois utilizar a opção 2 para pesquisar pelo nome da empresa, e obter os dias que andaram na x empresa.Obrigado.

package teste_ler;
//librarias
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 *
 * @author marqu
 */
public class Teste_ler {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        //criaçao de um array para armazenar a informaçao
        ArrayList<Teste_ler> ler=new ArrayList();
        Scanner sc = new Scanner(System.in);
        int op;
        
        //MENU
        do {
            System.out.println("****************MENU****************");
            System.out.println("1-Listar");
            System.out.println("2-pesquisar");
            System.out.println("3-Sair");
            op = sc.nextInt();

            if (op == 1) {
                
                FileInputStream fisPlaneamento = null;

                try {
                    //buscar o ficheiro excel
                    File file = new File("C:\\planeamentos\\planeamento.xlsx");
                    fisPlaneamento = new FileInputStream(file);

                    //cria um workbook = planeamento todo com todas as linhas do excel
                    XSSFWorkbook workbook = new XSSFWorkbook(fisPlaneamento);

                    //recuperamos apenas a primeira linha ou a primeira coluna
                    XSSFSheet sheet = workbook.getSheetAt(1);

                    //retorna todas as linhas 
                    Iterator<Row> rowIterator = sheet.iterator();

                    //varre todas as linhas
                    while (rowIterator.hasNext()) {

                        //recebe cada linha 
                        Row row = rowIterator.next();
                        //tiramos todas os dados da linha
                        Iterator<Cell> cellIterator = row.iterator();
                        //varremos todas os dados da linha atual
                        while (cellIterator.hasNext()) {
                            //criei uma celula
                            Cell cell = cellIterator.next();
                            
                            switch (cell.getCellType()) {

                                case Cell.CELL_TYPE_STRING:
                                    System.out.println("TIPO STRING: " + cell.getStringCellValue());
                                    //ler.add(cell.getStringCellValue());
                                    break;
                                case Cell.CELL_TYPE_NUMERIC:
                                    System.out.println("TIPO NUMERIC: " + cell.getNumericCellValue());
                                    break;
                                    //ler.add(cell.getNumericCellValue());
                                case Cell.CELL_TYPE_FORMULA:
                                    System.out.println("TIPO FORMULA: " + cell.getCellFormula());
                                    break;
                                    //ler.add(cell.getCellFormula());
                            }   
                            }
                            
                        }

                } catch (FileNotFoundException ex) {
                    Logger.getLogger(Teste_ler.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(Teste_ler.class.getName()).log(Level.SEVERE, null, ex);
                } finally {
                    try {
                        fisPlaneamento.close();
                    } catch (IOException ex) {
                        Logger.getLogger(Teste_ler.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
            if (op == 2) {
                        System.out.println("Insira o nome da empresa");
                        String nome_empresa;
                        nome_empresa=sc.next();
                      
                        //System.out.println("Nome da empresa"+);
                        //System.out.println("Nome do tecnico"+);
                        //System.out.println("Data"+);
                
                //eu coloco o programa a correr aparece o menu todo bonitinho eu clico na opçao (1) e ele mostra me
                //o que esta no excel(aparece em monitor) agora com a informação que aparece no monitor eu queria armazena la num
                //arraylist para depois poder pesquisar(consultar) na opcao (2)
            }

        } while (op != 3);

    }
}

E o que está ocorrendo?

Eu nao consigo armazenar os dados do documento deo excel num array

Não consegue por que? É isso que eu quero saber, o que acontece? Erro? O array explode? A máquina que você usa derrete? Os pandas do Afeganistão morrem afogados?

1 curtida

simplesmente quando vou armazenar ele da erro

mas nao sei se estou a armazenar a parte certa
switch (cell.getCellType()) {

                            case Cell.CELL_TYPE_STRING:
                                System.out.println("TIPO STRING: " + cell.getStringCellValue());
                                //ler.add(cell.getStringCellValue());
                                break;
                            case Cell.CELL_TYPE_NUMERIC:
                                System.out.println("TIPO NUMERIC: " + cell.getNumericCellValue());
                                break;
                                //ler.add(cell.getNumericCellValue());
                            case Cell.CELL_TYPE_FORMULA:
                                System.out.println("TIPO FORMULA: " + cell.getCellFormula());
                                break;
                                //ler.add(cell.getCellFormula());
                        }

Sim, estas são as partes corretas. Se desejas obter o valor numérico, utilize o método getNumericCellValue. Se for o literal, utilize o método getStringCellValue e assim por diante.
O detalhe é que, se deseja que seja armazenado em um vetor, precisas fazer com que os tipos lidos sejam transformados em um tipo específico, creio que String seja o ideal:

String[] oVetor = new String[200];
oVetor[0] = cell.getStringCellValue();

mas acho que o programa não aceita eu colocar
ler.add(cell.getNumericCellValue());

E não vai aceitar mesmo. Você não pode inserir um elemento diferente daquele que foi especificado como sendo o elemento a ser aguardado para o array.

Este método, getNumericCellValue, devolve um Double, se não me engano. Double não é e nunca será um Teste_ler.

ta bem obrigado, para conseguir armazenar tenho que utilizar as linhas de código que me indicou
String[] oVetor = new String[200];
oVetor[0] = cell.getStringCellValue();

Não necessariamente.
Esta classe, Teste_ler (com nome fora do padrão java, mas, ok), ela tem qual finalidade?
Uma planilha é, apenas, a forma visual (e, também, de armazenamento) que consiste em uma matriz.
Cada linha possui várias colunas. Logo, um vetor de uma única dimensão não é o mais apropriado para isso.

O nome foi só para exemplo porque neste momento estou a estagiar e desafiaram me a fazer o programa e eu estou a tentar

Existem duas soluções, portanto.
Uma é criar uma classe, efetivamente, em que cada atributo corresponda a uma coluna da planilha.,
A outra é criar um vetor de duas dimensões (a matriz)
Considere uma planilha com as colunas a seguir:

  • Código (int)
  • Cliente (String)
  • Email (String)

A classe pode ser

publc class Cliente {
    private int codigo;
    private String nome;
    private String email;
   //getters e setters omitidos
}

Em que isso facilita? Você pode ler cada valor isoladamente, sem problemas e atribuir cada um a seu respectivo atributo

Cliente cli = new Cliente();

cli.setCodigo(cell.getNumericCellValue()); //Talvez cast para transformar de double pra int
cli.setNome(cell.getStringCellValue());
cli.setEmail(cell.getStringCellValue());

Entendeu?

1 curtida

Obrigado valeu muito