Java如何读取xlsx和xls类型的值?

xlsx和xls的区别

区别:1、xls是excel 2007之前版本的使用的默认格式;xlsx是excel 2007之后的版本使用的默认格式,包括2007的版本。2、XLSX格式的占用空间比XLS的小。

Java如何处理xlsx、xls两种类型和读取

针对两种类型 需要对不同类型的文件进行两种方式的读取 下面直接贴伪代码

public ResponseResult<Void> parseFile(MultipartFile files) {
    
    
        Workbook wb = null;
        InputStream is = null;
        try {
    
    
            String originalFilename = files.getOriginalFilename();
            String prefix = null;
            if (originalFilename != null) {
    
    
                prefix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
            }
            is = files.getInputStream();
            if (("xls").equals(prefix)) {
    
    
                wb = new HSSFWorkbook(is);
            } else if (("xlsx").equals(prefix)) {
    
    
                wb = new XSSFWorkbook(is);
            }
        } catch (IOException e) {
    
    
            log.error(e.getMessage());
        }
        
        if (wb != null) {
    
    
            int sheetNum = wb.getNumberOfSheets();
            for (int i = 0; i < sheetNum; i++) {
    
    
                //获取指定sheet页
                sheet = wb.getSheetAt(i);
                //获取sheet名称
                String sheetName = sheet.getSheetName();
                //获取最大行数
                int rowNum = sheet.getPhysicalNumberOfRows();
                //验证是否空文件
                if (rowNum == 0) {
    
    
                    continue;
                }
                //获取第一行
                row = sheet.getRow(0);
                if (row == null) {
    
    
                    continue;
                }
                //获取最大列数
                int column = row.getPhysicalNumberOfCells();
                for (int j = 0; j < column; j++) {
    
    
                    if (row.getCell(j) != null) {
    
    
                        //读取单个单元格的内容并进行格式化转化
                        String columnName = this.getCellValue(row.getCell(j));
                    }
                }
            }
        }
        return null;
    }

因单元格的格式不统一 所以需要对单元格里的内容进行格式化处理

private String getCellValue(Cell cell){
    
    
        String cellValue = "";
        if(cell == null) {
    
    
            return cellValue;
        }
        switch (cell.getCellType().getCode()) {
    
     // 判断excel单元格内容的格式,并对其进行转换,以便插入数据库
            case 0:
                cellValue = String.valueOf((long) cell.getNumericCellValue());
                break;
            case 2:
                cellValue = String.valueOf(cell.getDateCellValue());
                break;
            case 3:
                cellValue = "";
                break;
            case 4:
                cellValue = String.valueOf(cell.getBooleanCellValue());
                break;
            case 5:
                cellValue = String.valueOf(cell.getErrorCellValue());
                break;
            case 1:
            default:
                cellValue = cell.getStringCellValue();
                break;
        }
        return cellValue;
    }

猜你喜欢

转载自blog.csdn.net/icemeco/article/details/125540831