[RESOLVIDO]Manipulando arquivo xls

5 respostas
G

Salve rapaziada,

Estou usando a API JExcelApi. Quando vou executar o meu código, esta dando esse erro:
Error: jxl.read.biff.BiffException: Unable to recognize OLE stream

Alguém já usou essa API e passou por esse mesmo erro ?

Eis o código:
package br.com.teste;

import java.io.File;
import java.io.IOException;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;


public class SorteioFinal {
	
	public static void main(String[] args) throws IOException, BiffException {		
		String path = "/Gabriel/Projetos/sorteio/Rel_Nome.xls";
	    File fp = new File(path);
		
	    try {
	        Workbook wb = Workbook.getWorkbook(fp); 
	        Sheet sheet = wb.getSheet(0); 
	        
	        int columns = sheet.getColumns(); 
	        int rows = sheet.getRows(); 
	        String data; 
	        
	        for(int col = 0; col < columns; col++) { 
	             for(int row = 0; row < rows; row++) { 
	                  data = sheet.getCell(col, row).getContents();
	                  System.out.println(data);
	             } 
	         } 
	   } 
	   catch(Exception ioe) { 
	        System.out.println("Error: " + ioe); 
	   }	
	
	}
	
}

Valew
[]'s

5 Respostas

A

Não conheço esta biblioteca, mas pelo tipo de erro parece que é uma versão de arquivo excel que não é reconhecida pela biblioteca.

Att.

G

Ok. Para facilitar o trabalho eu exportei para txt o arquivo xls. Aí comecei a dar conta de resolver o que eu quero. É mais ou menos assim. Tenho um arquivo txt com vaaaaaaaaarios nomes em ordem, separados com (";") no final de cada nome. No while dou um split(";") para pegar cada nome desse arquivo e jogar num List, mas não estou conseguindo, o código só coloca o primeiro nome e não coloca o resto.

Eis o código:
package br.com.teste;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class SorteioTXT {

	public static void main(String []argv) {		
		try {
			BufferedReader reader = new BufferedReader(new FileReader(new File("/Gabriel/Projetos/sorteio/NOME.txt")));  
			String [] dados;  
			String linha = null;
			int cont = 0;			

			while(reader.ready()){
				linha = reader.readLine();  
				dados = linha.split(";");	
				List<String> lista = new ArrayList<String>();
				lista.add(dados[cont]);
								
				

			}	
			reader.close();			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (NullPointerException e) {
			System.out.println("###### Fim do Arquivo ######");
		}
	}

	public static void Gravar(String texto){  
		String conteudo = texto;  
		try{  
			// o true significa q o arquivo será constante  			
			BufferedWriter bw = new BufferedWriter(new FileWriter("arquivoNomes.txt",true));
			
			bw.write(conteudo);
			bw.newLine();
			bw.flush();
			bw.close();
		}  
		// em caso de erro apresenta mensagem abaixo  
		catch(IOException e){  
			System.out.println("Erro");  
		}  
	}

}
o arquivo NOME.txt é mais ou menos assim:
ADELMAN DE BARROS VILLA JÚNIOR;
ADEMAR PASSOS VEIGA;
ADEMAR YOSHIAKI HUZIROKA;
ADRIANA DE LIMA BANDEIRA;
ADRIANA DE LUCA CARVALHO;
ADRIANA DE SABOYA GOLDBERG;
ADRIANA KEHDI;
ADRIANA MINIATI CHAVES;
ADRIANA NOGUEIRA TIGRE COUTINHO;
ADRIANA QUEIROZ DE CARVALHO;
ADRIANA ZANDONADE;
ADRIANE DOS SANTOS;
ADRIANO FALCÃO NERI;
ADRIANO MARES TAROUCO;
ADRIANO MARTINS PORTELINHA;
ADRIENNE GIANNETTI NELSON DE SENNA JOBIM;
ADSON AZEVEDO MATOS;
AFFONSO NEVES BAPTISTA NETO;
AFONSO AUGUSTO RIBEIRO COSTA;

OBS: Se eu conseguir carregar essa lista com os nomes vindo do arquivo ordenado, vou dar um Collections.suffle() para em baralhar esses nomes em ordem aleatória e grava de volta num arquivo txt.

Se alguém puder apontar esse meu erro, fico grato.

[]'s

A
Olá, você está lendo errado o arquivo. A seguir é mostrado um exemplo de leitura:
import java.io.*;

public class Estudos{
  public static void main(String[] args){
    try {
        BufferedReader in = new BufferedReader(new FileReader("conteudo.txt"));
        String str;
        while((str = in.readLine()) != null){
           System.out.println(str);
        }
        in.close();
    } 
    catch (IOException e){
        // possiveis erros são tratatos aqui
    }

    System.exit(0);
  }
}
Assim apague a linha 24 e troque a 23 por:
while((linha = reader.readLine()) != null){
Mude o código da linha 26 para a linha 22, pois da forma que está toda vez vai iniciar um nova lista.

Att.

I

Amigo,vc abriu o arquvo xls fez pá vc queria dele porém não o fechou.
Lembre-se que para o jxl todo arquivo aberto deve ser fechado!
Portanto faca:

wb.close

sempre no final de seus métodos que utilizam a biblioteca.

G
Obrigado pessoal do guj pelo help. Finalizei o algoritimo que eu pretendi fazer. É o seguinte: recebo um arquivo txt com varios nomes em ordem com separado com (";"). Faço a leitura de cada linha e armazeno numa lista. Com a lista carregada, embaralho a lista com o Collections.suffle() e mando gravar essa lista em outro arquivo txt. Eis o código:
package br.com.teste;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class SorteioTXT {

	public static void main(String []argv) {		
		try {
			//Le o arquivo
			BufferedReader reader = new BufferedReader(new FileReader(new File("/Gabriel/Projetos/sorteio/NOME.txt")));			
			String [] dados;  
			String linha = null;
			int cont = 0;
			int i = 1;
			List<String> lista = new ArrayList<String>();			
			
			//Percorre a o arquivo
			while((linha = reader.readLine()) != null){
				//Armazena cada linha do arquivo no array.
				dados = linha.split(";");			
				lista.add(dados[cont]);
			}
			
			reader.close();
			
			//Embaralha a lista
			Collections.shuffle(lista);
			for(int x = 0; x < lista.size(); x++){
				//A cada 80 nomes, imprimir linha
				if (x % 80 == 0 && x != 0){
					gravar("==================================================================================================");	
				} 
				gravar(i++ + " - " + lista.get(x));
			}			
						
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			System.out.println("Arquivo não encontrado!");
		} catch (IOException e) {
			e.printStackTrace();
		} catch (NullPointerException e) {
			System.out.println();
			System.out.println("Fim do Arquivo");
		}
	}

	public static void gravar(String texto){
		String conteudo = texto;  
		try{  
			// o true significa q o arquivo será constante  			
			BufferedWriter bw = new BufferedWriter(new FileWriter("arquivoNomes.txt",true));
			
			bw.write(conteudo);
			bw.newLine();
			bw.flush();
			bw.close();
		}  
		// em caso de erro apresenta mensagem abaixo  
		catch(IOException e){  
			System.out.println("Erro na gravação do arquivo");  
		}  
	}
}

[]'s

Criado 1 de setembro de 2010
Ultima resposta 3 de set. de 2010
Respostas 5
Participantes 3