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;
}