Par*_*war 4 java xls apache-poi numberformatexception
我有一个应用程序,使用apache poi读取xls表.当单元格具有数值时,我通过row.getCell(i).getNumericValue()读取它.但它返回浮点数.就像单元格值为1一样,它返回1.0.我可以将它转换为int吗?任何帮助,将不胜感激.我尝试了Integer.parseInt(value) - 但它抛出了NumberFormat异常.感谢任何帮助.这里是伪代码:
FileInputStream file = new FileInputStream(new File("C:\\test.xls"));
HSSFWorkbook workbook = new HSSFWorkbook(file);
HSSFSheet sheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = sheet.iterator();
while(rowIterator.hasNext()) {
Row row = rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
while(cellIterator.hasNext()) {
Cell cell = cellIterator.next();
switch(cell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC:
String value= String.valueOf(cell.getNumericCellValue());
int intVal = Integer.parseInt(value)-->>throws Exception
Run Code Online (Sandbox Code Playgroud)
Gag*_*arr 15
Excel中的数字(除少数边缘情况外)存储为浮点数.Java中的浮点数在格式化为字符串时会打印出一个尾随小数点,如您所见
假设你真正想要的是"给我一个看起来就像Excel为这个单元格显示的字符串",那么就不要调用cell.toString().在大多数情况下,这不会给你你想要的东西
相反,您需要使用DataFormatter类,该类提供读取应用于单元格的Excel格式规则的方法,然后在Java中重新创建(尽可能)
你的代码应该是:
Workbook wb = WorkbookFactory.create(new File("c:/test.xls");
DataFormatter fmt = new DataFormatter();
Sheet sheet = wb.getSheetAt(0);
for (Row row : sheet) {
Cell cell = row.getcell(0, Row.RETURN_BLANK_AS_NULL);
if(cell!=null) {
String value = fmt.formatCellValue(cell);
if (! value.trim().isEmpty()) {
System.out.println("Cell as string is " + value);
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可能会注意到我还修复了一堆其他东西......!
您可以使用简单的步骤将 int 值读取为字符串 apache poi
首先使用以下方法计算工作表中的行数
private int getRowCount(Sheet currentSheet) {
int rowCount = 0;
Iterator<Row> rowIterator = currentSheet.iterator();
while(rowIterator.hasNext()) {
Row row = rowIterator.next();
if(row == null || row.getCell(0) == null || row.getCell(0).getStringCellValue().trim().equals("") || row.getCell(0).toString().trim().equals("")
|| row.getCell(0).getCellType()==Cell.CELL_TYPE_BLANK){
break;
}
else
rowCount=rowCount + 1;
}
return rowCount;
}
Run Code Online (Sandbox Code Playgroud)
然后在您的方法中使用以下代码
Workbook workbook = WorkbookFactory.create(new File("c:/test.xls");
Sheet marksSheet = (Sheet) workbook.getSheet("Sheet1");
int zoneLastCount = 0;
if(marksSheet !=null ) {
zoneLastCount = getRowCount(marksSheet);
}
int zone = zoneLastCount-1;
int column=1
for(int i = 0; i < zone; i++) {
Row currentrow = marksSheet.getRow(i);
double year = Double.parseDouble(currentrow.getCell(columnno).toString());
int year1 = (int)year;
String str = String.valueOf(year1);
}
Run Code Online (Sandbox Code Playgroud)