Essa aqui é a classe, funciona perfeitamente bem…
private static List upload(File file) throws IOException {
List listaDadosPlanilha = new ArrayList<>();
// pegando o arquivo
FileInputStream arquivo = new FileInputStream(file);
// *.XLS
HSSFWorkbook hworkbook;
// *.XLSX
XSSFWorkbook xworkbook;
Sheet sheet;
if (FilenameUtils.getExtension(file.toString()).equalsIgnoreCase("xls")) {
hworkbook = new HSSFWorkbook(arquivo);
// Selecionando a Aba
sheet = hworkbook.getSheetAt(0);
} else {
xworkbook = new XSSFWorkbook(arquivo);
// Selecionando a Aba
sheet = xworkbook.getSheetAt(0);
}
// setando as linhas
rows = (List<Row>) toList(sheet.iterator());
// PERCORRENDO A LINHA
rows.forEach(row -> {
try {
if (row.getCell(0).getCellType().toString() != "BLANK") {
List<Cell> cells = (List<Cell>) toList(row.cellIterator());
String linha = "";
for (Cell dado : cells) {
try {
if (dado.getCellType().toString() == "BLANK") {
break;
}
switch (dado.getCellType().toString()) {
case "STRING":
linha += " " + dado.getStringCellValue();
break;
case "NUMERIC":
linha += " " + dado.getNumericCellValue();
break;
case "BOOLEAN":
linha += " " + dado.getBooleanCellValue();
break;
case "FORMULA":
linha += " " + dado.getCachedFormulaResultType().toString();
break;
case "DATE":
linha += " " + dado.getDateCellValue();
break;
}
} catch (Exception e) {
e.getMessage();
}
}
listaDadosPlanilha.add(linha);
}
} catch (Exception e) {
}
});
arquivo.close();
return listaDadosPlanilha;
}
Porem… uma magica acontece nessa linha aqui.
List cells = (List) toList(row.cellIterator());
A variável row traz:
0 234234234 123Perfeito!
E joga na variável cells, que magicamente traz:
teste, 2.34234234E8, 123.0
Veja que está diferente! O valor está com um ponto e com E8… Creio que o getnumeric tenha alguma limitação a quantidade de algarismos e ele transforma essa variável como se fosse expoente, ou algo assim… a questão é… como consertar isso?