对Excel文件进行解析
我使用的是springboot,maven项目结构,首先需要引入jar包,直接在pom中引入POI,版本最好一致,不然可能会报错。
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
接下来就是核心代码,很简单的,这是我写的解析Excel的工具类,fileName是文件路径,我这里没有对Excel的sheet进行循环读取,因为我的项目中不需要,数据都是在sheet1,有需要的可以直接写成循环读取。由于我返回的是string类型字符串,所以这里使用了StringUtils进行转码,只需要在pom引入comm-lang3的jar包即可使用。
public static String upExcel(String fileName) {
Workbook workbook = readExcel(fileName);
//获得sheet的数量(sheet的index是从0开始的)
int sheetCount = workbook.getNumberOfSheets();
String excels = new String();
//遍历Sheet
//创建list存储
ArrayList<String> list = new ArrayList<>();
//得到Sheet
Sheet sheet = workbook.getSheetAt(0);
//得到每个Sheet的行数,此工作表中包含的最后一行(Row的index是从0开始的)
int rowCount = sheet.getLastRowNum();
//遍历Row
for (int j = 1; j <= rowCount; j++) {
//得到Row
Row row = sheet.getRow(j);
if (row == null) {
continue;
}
//创建string用于拼接值
String str = new String();
//得到每个Row的单元格数
int cellCount = row.getLastCellNum();
//获取每个单元格的值
for (int k = 0; k < cellCount; k++) {
Cell cell = row.getCell(k);
Object value = getCellFormatValue(cell);
if (value.equals("")||value == null)value = "0";
if (str.length() == 0) {
str = String.valueOf(value);
} else {
str = str + " " + String.valueOf(value);
}
}
list.add(str);
}
excels = StringUtils.join(list, "\n");
return excels;
}
/**
* 根据文件地址,解析后缀返回不同的Workbook对象
*
* @param filePath 文件地址
* @return Excel文档对象Workbook
*/
public static Workbook readExcel(String filePath) {
if (filePath == null || filePath.equals("")) {
return null;
}
//得到文件后缀
String suffix = filePath.substring(filePath.lastIndexOf("."));
System.out.println(suffix);
try {
InputStream is = new FileInputStream(filePath);
if (".xls".equals(suffix)) {
return new HSSFWorkbook(is);
}
if (".xlsx".equals(suffix)) {
return new XSSFWorkbook(is);
}
return null;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 获取Excel的值
* @param cell
* @return
*/
public static Object getCellFormatValue(Cell cell) {
Object cellValue;
if (cell != null) {
//判断cell类型
switch (cell.getCellType()) {
//空值单元格
case Cell.CELL_TYPE_BLANK: {
cellValue = "";
break;
}
//数值型单元格 getNumericCellValue()以数字形式获取单元格的值。
case Cell.CELL_TYPE_NUMERIC: {
//判断cell是否为日期格式
if (DateUtil.isCellDateFormatted(cell)) {
//转换为日期格式YYYY-mm-dd
//cellValue = cell.getDateCellValue();
Date date = cell.getDateCellValue();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
cellValue = dateFormat.format(date);
} else {
//数字
System.out.println("数字格式");
cellValue = cell.getNumericCellValue();
}
break;
}
//公式型单元格getCellFormula()返回单元格的公式
case Cell.CELL_TYPE_FORMULA: {
cellValue = String.valueOf(cell.getNumericCellValue());
break;
}
//字符串单元格
case Cell.CELL_TYPE_STRING: {
cellValue = cell.getRichStringCellValue().getString();
break;
}
//布尔值型单元格
case Cell.CELL_TYPE_BOOLEAN: {
cellValue = String.valueOf(cell.getBooleanCellValue());
break;
}
default:
cellValue = "";
}
} else {
cellValue = "";
}
return cellValue;
}