Olá pessoal boa tarde, estou fazendo uma aplicação que extrai dados de uma tabela xls e coloca em uma Arraylist, até ai tudo bem estou conseguindo fazer utilizando a biblioteca POI, mas me apareceu um problema.
Tenho que criar um objeto de cada linnha da tabela, como disse acima consigo pegar o elemento e gravar em uma Arraylist sem tipo definido:
ArrayList listaCamlistaCamposEquipamento
consigo teverminar o tipo que existe na celula com o objeto Cell e o seus metodos:
listaCamposEquipamento.add(cell.getRichStringCellValue();)
listaCamposEquipamento.add(cell.getDateCellValue());
listaCamposEquipamento.add(cell.getNumericCellValue());
Mas esses valores são inseridos como objets, depois que faço a extra;cão dos dados tenho que inserir na minha entidade e é aqui que esta o problema:
Equipamento equipamento = new Equipamento();
equipamento.setNumero(listaCamposEquipamento.get(0));
Da erro por que a variavel numero da classe Equipamento é int e o valor da posição 0 da listaCamposEquipamento é um Object.
como eu faço para extrair uma String , int ou date de um Object? Tentei um String.valueOf ou parse mas não achei.
Agradeço desde já toda a ajuda.
Pergunta, você sabe exatamente quais são os tipos de cada posição da List?
Senão, um try/catch nervoso com vários outros encadeados no catch das exceptions de NumberFormatException e etc…
Você pode encadear vários instanceof para testar se é Number, String ou Date.
Mas, pelo que parece, melhor você colocar as coisas em um mapa, já que você, depois, vai usar os setters direto… Ou, se você já sabe que 0 == int, você pode fazer casts:
Equipamento equipamento = new Equipamento();
equipamento.setNumero(((Number)listaCamposEquipamento.get(0)).intValue());
Isso tira seu Exception. Mas somente se você fez cell.getNumericCellValue()!
Você pode fazer também com toString() e Expressões Regulares, mas aí é complicar…
Ola, cara…
Está usando DefaultTableModel certo? e precisa inserir/extrair objetos?
para isto eu meio que condeno o DefaultTableModel…
Dê uma pesquisada sobre ObjectTableModel. Dependendo do tamanho de sua aplicação isso facilitará sua vida.
Pode usar este abaixo no link ou criar o seu próprio…
http://markytechs.wordpress.com/2009/05/29/objecttablemodel/
A tabela parece ser um XLS, pelo primeiro post…
[quote=leo.andven]Você pode encadear vários instanceof para testar se é Number, String ou Date.
Mas, pelo que parece, melhor você colocar as coisas em um mapa, já que você, depois, vai usar os setters direto… Ou, se você já sabe que 0 == int, você pode fazer casts:
Equipamento equipamento = new Equipamento();
equipamento.setNumero(((Number)listaCamposEquipamento.get(0)).intValue());
Isso tira seu Exception. Mas somente se você fez cell.getNumericCellValue()!
Você pode fazer também com toString() e Expressões Regulares, mas aí é complicar…[/quote]
Resolvido, tive que tirar a ArrayList e usar o objeto Equipamento direto, fazendo um Switch-Case verificando o indice da coluna da celula, como sabia qual era o tipo do dado eu simplesmente inseria com
switch (coluna){
case 0:
equipamento.setNumero(cell.getNumericCellValue());
break;
case 1:
equipamento.setString(cell.getRichStringCellValue().toString);
break;
}
[quote=drsmachado]Pergunta, você sabe exatamente quais são os tipos de cada posição da List?
Senão, um try/catch nervoso com vários outros encadeados no catch das exceptions de NumberFormatException e etc…[/quote]
no caso fiz um CASE nervoso com todas as colunas da minha tabela
Sim é uma tabela.xls