Excel em Java

Recentemente precisei fazer a leitura de arquivos excel para um sistema que estou desenvolvendo e tive dificuldades para achar um exemplo que mostrasse claramente como fazer a leitura do mesmo.
Assim resolvi mostrar a forma como fiz e que resolveu meu problema, lembrando que cada um tem uma forma de fazer.

1 – O primeiro passo é adicionar a biblioteca no projeto.

Neste tutorial utilizei a versão 2.6.12 da biblioteca.

Usuário Maven.

<dependency>
      <groupId>net.sourceforge.jexcelapi</groupId>
      <artifactId>jxl</artifactId>
      <version>2.6.12</version>
</dependency>
pom.xml

Ou download diretamente em: https://sourceforge.net/projects/jexcelapi/files/jexcelapi/2.6.12/

2 – Ler arquivo Excel utilizando a biblioteca.

Criar o Workbook do arquivo excel.

File file = new File("/home/allan-braga/Desktop/alunos.xls");
FileInputStream fileInputStream = new FileInputStream(file);

//Usei o enconding Cp1252 para corrigir meus problemas de encoding 
WorkbookSettings ws = new WorkbookSettings();
ws.setEncoding("Cp1252");
//Para não mostrar avisos no console
ws.setSuppressWarnings(true);
Workbook workbook = Workbook.getWorkbook(fileInputStream,ws);

//Índíce do arquivo se acaso tiver mais de um
Sheet sheet = workbook.getSheet(0);
//Títulos do arquivo
Cell[] titles =  sheet.getRow(0);
 

Da forma como implementei é feito a leitura de acordo os títulos das colunas então o primeiro passo e mapear as colunas que deseja ler, independete da ordem que ela esteja dentro do arquivo.

 
HashMap<String,String> titleColumnsRead = new HashMap<String,String> ();
titleColumnsRead.put("nome", "");
titleColumnsRead.put("sobrenome", "");
titleColumnsRead.put("endereco", "");
titleColumnsRead.put("cep", "");
Colunas a serem lidas

Utilizei um HashMap para facilitar a verificação do título da coluna usando o método containsKey como mostrado abaixo:

3 – Percorrer linhas e colunas e atribuir ao objeto aluno.

ArrayList<Aluno> alunos = new ArrayList<>();
//Linhas
for (int i = 1; i < sheet.getRows(); i++) {
	Aluno aluno = new Aluno();
	
	//Colunas
	for (int j = 0; j < sheet.getColumns(); j++) {
		//Conteúdo da celula que está sendo lida
		Cell  celulaJ = sheet.getCell(j, i);
		//Verifica se a coluna que está sendo lida é alguma coluna do hashmap
		if(titleColumnsRead.containsKey(titles[j].getContents())){
			//Verifica qual é a coluna e atribui no objeto
			switch (titles[j].getContents()) {
				case "nome":
					aluno,setNome(celulaJ.getContents());
				break;
				case "sobrenome":
					aluno,setSobrenome(celulaJ.getContents());
				break;
				case "endereco":
					aluno,setEndereco(celulaJ.getContents());
				break;
				case "cep":
					aluno,setCep(celulaJ.getContents());
				break;
			}
		}
	}
	alunos.add(aluno);
}
Percorre linhas e colunas

 

Essa é a forma que utilizei para resolver meus problema, dúvidas e sugestões são bem vindas.

4 COMENTÁRIOS

  1. Usamos muito isso aqui na empresa, é uma pratica muito interessante, já definimos uma planilha onde mandamos para o cliente preencher para alimentar o sistema. Prático e rápido

DEIXE UMA RESPOSTA