Campo Inteiro Retornando Com Ponto Flutuante (Jakarta POI - Excel)

6 respostas
S

Boa tarde a todos, estou usando o Jakarta POI para ler um arquivo em XLS e passo ele para o Banco de Dados. Fiz ele da forma mais generica possível. Eu tenho uma planilha bem assim:

CD_PRONOMES | NOME_PRONOME
1 | Eu
2 | Tu
3 | Ele
4 | Nós
5 | Vós
6 | Eles

O meu problema é o seguinte: o campo código está EXATAMENTE como está ai (ou seja, 1, 2, 3, 4, 5, 6), quando eu uso

sheet.getRow(1).getCell(0)

Ele está retornando 1.0 e não 1.

Ja tentei abrir o arquivo .xls e mudar a formatação dele para texto mas continua trazendo 1.0, o que faz o programa lançar um TypeConvertionException já que o campo CD_PRONOMES só aceita números inteiros.

Alguém conhece alguma solução para este problema?

6 Respostas

davidbuzatto

Vc não pode converter para inteiro?

(int) sheet.getRow(1).getCell(0)
S

[quote=davidbuzatto]Vc não pode converter para inteiro?

(int) sheet.getRow(1).getCell(0)

O problema é que eu quero deixar da forma mais generica possivel.

O mesmo metodo que pega o codigo, pega o nome e todos os outros campos.

E

Que eu saiba, o Excel guarda os dados como três tipos possíveis: números, strings e fórmulas.
Ele guarda todos os números como double (ponto-flutuante, 64 bits).
Ele não tem o conceito de int != double != BigDecimal que há no Java.
Portanto, em vez de pensar tão genericamente assim, você terá de especificar como quer que os dados sejam formatados.
São fatos da vida (afinal de contas, se você pegar essa planilha Excel que você mostrou para a gente e formatar essa coluna como reais, por exemplo, deve aparecer algo como R$ 1,00, R$ 2,00 etc. sendo que os dados não foram alterados, apens o formato.

davidbuzatto

O caminho é usar a classe DataFormatter: http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/DataFormatter.html
Com ela, você vai obter o conteúdo da célula como uma String. Ai você tenta fazer um Integer.parseInt no valor. Se for um inteiro, beleza. Se for um valor em ponto flutuante, vai ser lançada uma NumberFormatException ai basta vc fazer um Double.parseDouble.

[]'s

S

davidbuzatto:
O caminho é usar a classe DataFormatter: http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/DataFormatter.html
Com ela, você vai obter o conteúdo da célula como uma String. Ai você tenta fazer um Integer.parseInt no valor. Se for um inteiro, beleza. Se for um valor em ponto flutuante, vai ser lançada uma NumberFormatException ai basta vc fazer um Double.parseDouble.

[]'s

Obrigado, vou dar uma olhada nessa classe.

S

entanglement:
Que eu saiba, o Excel guarda os dados como três tipos possíveis: números, strings e fórmulas.
Ele guarda todos os números como double (ponto-flutuante, 64 bits).
Ele não tem o conceito de int != double != BigDecimal que há no Java.
Portanto, em vez de pensar tão genericamente assim, você terá de especificar como quer que os dados sejam formatados.
São fatos da vida (afinal de contas, se você pegar essa planilha Excel que você mostrou para a gente e formatar essa coluna como reais, por exemplo, deve aparecer algo como R$ 1,00, R$ 2,00 etc. sendo que os dados não foram alterados, apens o formato.

Está informação também me foi muito util. No final, fiz o que davidbuzatto disse: tentar a conversao para inteiro, caso falhe, passa como String mesmo.

Problema resolvido.

Criado 10 de agosto de 2012
Ultima resposta 10 de ago. de 2012
Respostas 6
Participantes 3