Ao obter o conteúdo da célula usando a Apache-POI Library, obtenho tanto “Não é possível obter um valor numérico de uma célula de texto” quanto o contrário. Como faço para corrigir isso?
Percebo que a pergunta é um pouco confusa, mas não sabia mais o que fazer. Enfim, aqui está o código original:
private void readFile(String excelFileName) throws FileNotFoundException, IOException {
XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(excelFileName));
if (workbook.getNumberOfSheets() > 1){
System.out.println("Please make sure there is only one sheet in the excel workbook.");
}
XSSFSheet sheet = workbook.getSheetAt(0);
int numOfPhysRows = sheet.getPhysicalNumberOfRows();
XSSFRow row;
XSSFCell num;
for(int y = 1;y < numOfPhysRows;y++){ //start at the 2nd row since 1st should be category names
row = sheet.getRow(y);
poNum = row.getCell(1);
item = new Item(Integer.parseInt(poNum.getStringCellValue());
itemList.add(item);
y++;
}
}
private int poiConvertFromStringtoInt(XSSFCell cell){
int x = Integer.parseInt(Double.toString(cell.getNumericCellValue()));
return x;
}
Eu estou recebendo o seguinte erro
Exception in thread "main" java.lang.IllegalStateException: Cannot get a numeric value from a text cell
at org.apache.poi.xssf.usermodel.XSSFCell.typeMismatch(XSSFCell.java:781)
at org.apache.poi.xssf.usermodel.XSSFCell.getNumericCellValue(XSSFCell.java:199)
Mesmo que eu mude para obter uma string usandoXSSFCell.getStringCellValue()
ou mesmoXFFSCell.getRichTextValue
, Recebo o reverso da mensagem de erro acima (e estou me certificando de que seja uma int usandoInteger.parseInt(XSSFCell.getStringCellValue()
).
O erro diz:
Exception in thread "main" java.lang.IllegalStateException: Cannot get a text value from a numeric cell
at org.apache.poi.xssf.usermodel.XSSFCell.typeMismatch(XSSFCell.java:781)
at org.apache.poi.xssf.usermodel.XSSFCell.getNumericCellValue(XSSFCell.java:199)
Sei que a coluna da planilha do Excel é de fato uma string. Não consigo alterar a planilha do Excel, pois ela é carregada em outro lugar, sempre usando o mesmo formato e formatação cada coluna primeiro leva muito tempo de processament
Alguma sugestão
[Solução] Aqui está o código da solução que vim da ajuda da @ Wivani:
private long poiGetCellValue(XSSFCell cell){
long x;
if(cell.getCellType() == 0)
x = (long)cell.getNumericCellValue();
else if(cell.getCellType() == 1)
x = Long.parseLong(cell.getStringCellValue());
else
x = -1;
return x;
}