Ler uma celula com valor data de uma tabela excel usando Java

Bom dia desenvolvedores, estou tentando ler uma tabela excel(.xls) com a API POI.
Consegui ler algumas celulas, mas quando a celula possui uma data ele me retorna um erro.
segue o codigo:

public class LendoXls {

public static void main(String[] args) throws IOException {

    FileInputStream inputS = null;
    try {

        File caminhoXls = new File("D:\\dados.xls");
        inputS = new FileInputStream(caminhoXls);

        // cria uma planilha com todas as abas
        HSSFWorkbook work = new HSSFWorkbook(inputS);

        // recuperando o primeira planilha(aba)
        HSSFSheet planilha = work.getSheetAt(0);

        // retorna todas as linhas da planilha(0)
        Iterator<Row> linhaIterator = planilha.rowIterator();

        while (linhaIterator.hasNext()) {

            Row conteudoLinha = linhaIterator.next();

            Iterator<Cell> celulaIterator = conteudoLinha.cellIterator();

            while (celulaIterator.hasNext()) {

                Cell conteudoCelula = celulaIterator.next();

                switch (conteudoCelula.getColumnIndex()) {

                    case 0:
                        System.out.println("Nome: " + conteudoCelula.getStringCellValue());
                        break;

                    case 1:
                        System.out.println("Sobrenome: " + conteudoCelula.getStringCellValue());
                        break;

                     // aqui dá erro
                    case 2:
                        System.out.println("Data nascimento: " + conteudoCelula.getDateCellValue());
                        break;
                }

            }

        }
    } catch (FileNotFoundException ex) {
        System.out.println("erro" + ex);
    } finally {
        inputS.close();
    }

}

}

erro:

Nome: NOME
Sobrenome: SOBRENOME
Exception in thread “main” java.lang.IllegalStateException: Cannot get a NUMERIC value from a STRING cell
at org.apache.poi.hssf.usermodel.HSSFCell.typeMismatch(HSSFCell.java:654)
at org.apache.poi.hssf.usermodel.HSSFCell.getNumericCellValue(HSSFCell.java:679)
at org.apache.poi.hssf.usermodel.HSSFCell.getDateCellValue(HSSFCell.java:700)
at lendoxls.LendoXls.main(LendoXls.java:71)
C:\Users\Andre\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
FALHA NA CONSTRUÇÃO (tempo total: 1 segundo)

Sua célula não é do tipo data, então tem que trocar o conteudoCelula.getDateCellValue() por conteudoCelula.getStringCellValue().

Ainda deu erro:

Exception in thread "main" java.lang.IllegalStateException: Cannot get a NUMERIC value from a STRING cell
at org.apache.poi.hssf.usermodel.HSSFCell.typeMismatch(HSSFCell.java:654)
at org.apache.poi.hssf.usermodel.HSSFCell.getNumericCellValue(HSSFCell.java:679)
at lendoxls.LendoXls.main(LendoXls.java:68)
C:\Users\Andre\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1

O StackTrace está dizendo que na linha 68 do arquivo LendoXls.java você chamou o método getNumericCellValue() mas a célula é do tipo String, neste caso novamente você tem que usar o método getStringCellValue().

Sugiro que você sempre teste o tipo da célula para saber qual o método apropriado a chamar.

Achei o problema. é que a 1º linha é cabeçalho, contendo apenas string
na segunda linha há uma celula data, ai acontece o erro de String e Numeric.
Acho que devo desconsiderar o cabeçalho e ler apenas as linhas abaixo.
vlw mesmo pela ajuda @staroski.

1 curtida