一、说明
我们要解析一个包含了各种类型的表格,首先我们提供一个简单的表格。
下面的这个表格只有一行数据,分别包含了A:字符串类型,B:数字类型,C:日期类型,D:布尔类型,E:空白格(有样式),F:公式。
二、导入依赖
commons-lang3包不是必须的,为了在代码中使用stringUtils工具类才导入的。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency>
三、完整代码
package excel.parse;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class ExcelCellValueParse {
private static final String PATH = "D:" + File.separator + "含各种类型测试.xlsx";
public static void main(String[] args) throws Exception {
// 获取要解析的excel文件
InputStream inputStream = new FileInputStream(PATH);
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
// 获取第一个sheet页
XSSFSheet sheet = workbook.getSheetAt(0);
// 获取第一行
XSSFRow row = sheet.getRow(0);
// 获取本行最后一列的列号
short lastCellNum = row.getLastCellNum();
//遍历每一列的值
for(int colNo =0;colNo <lastCellNum; colNo++){
XSSFCell cell = row.getCell(colNo);
// 获取单元格的值
String cellValue = getCellValue(cell, workbook);
System.out.println(cellValue);
}
}
public static String getCellValue(Cell cell, Workbook workbook){
if(cell == null){
return StringUtils.EMPTY;
}
CellType cellTypeEnum = cell.getCellTypeEnum();
switch (cellTypeEnum){
case STRING:// 字符串
return cell.getStringCellValue();
case NUMERIC:// 数值类型(整数、小数、日期)
if (DateUtil.isCellDateFormatted(cell)) {
return DateFormatUtils.format(cell.getDateCellValue(), "yyyy-MM-dd");
} else {
return String.valueOf(cell.getNumericCellValue());
}
case BOOLEAN:// 布尔
return String.valueOf(cell.getBooleanCellValue());
case BLANK:// 空白格,有样式
return "BLANK";
case FORMULA:// 公式
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
return evaluator.evaluate(cell).getNumberValue()+"";
case _NONE:// 未知类型
return "未知类型";
case ERROR:// 错误单元格
return "错误单元格";
default:
return StringUtils.EMPTY;
}
}
}
四、运行结果
科技四路
100.0
2023-02-22
false
BLANK
1.0
Process finished with exit code 0