excel解析对比
pom导入相关依赖
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>11</java.version>
<!-- 使用 Java 11 语言特性 ( -source 11 ) 并且还希望编译后的类与 JVM 11 ( -target 11 )兼容,您可以添加以下两个属性,它们是默认属性插件参数的名称-->
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.source>11</maven.compiler.source>
<!-- 对应junit Jupiter的版本号;放在这里就不需要在每个依赖里面写版本号,导致对应版本号会冲突-->
<junit.jupiter.version>5.8.2</junit.jupiter.version>
<maven.compiler.version>3.8.1</maven.compiler.version>
<maven.surefire.version>3.0.0-M5</maven.surefire.version>
<!-- plugins -->
<maven-surefire-plugin.version>3.0.0-M5</maven-surefire-plugin.version>
<poi.version>5.2.2</poi.version>
</properties>
<!-- 物料清单 (BOM)-->
<dependencyManagement>
<dependencies>
<!--当使用 Gradle 或 Maven 引用多个 JUnit 工件时,此物料清单 POM 可用于简化依赖项管理。不再需要在添加依赖时设置版本-->
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>${junit.jupiter.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<!-- 对应添加的依赖的作用范围-->
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>${junit.jupiter.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.jupiter.version}</version>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>${junit.jupiter.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
poi解析步骤
- 1、获取文件名后缀
- 2、查看文件是否存在
- 3、获取工作薄对象
Workbook
- 如果是
xls
结尾用HSSF
- 如果是
xlsx
结尾用XSSF
- 如果是
- 4、读取第一个
sheet
- 5、获取行
- 6、读取每一行的单元格内容
- 7、最后关闭流
获取工作薄对象Workbook
- 使用输入流的形式打开文件获取工作薄对象
- 直接使用file打开文件获取工作薄对象
获取sheet
- 想要获取哪个就读取哪个sheet
- 获取当前工作薄有几个sheet标签页
获取行数
- 获取sheet中有多少行
- 一个sheet里面有多个row
获取每一个单元格数据
一行「row」有多个单元格「Cell」
Map<Integer, List<Object>> data = new HashMap<>();
int i = 0;
for (Row row : sheet) {
//{0=[]}
data.put(i, new ArrayList<Object>());
for(Cell cell:row){
//[]
//每一个单元格就是ArrayList里面一个元素
List<Object> objectList = data.get(i);
objectList.add(cell);
}
i++;
}
System.out.println("data:" + data);
数据解析类型
excel可以设置列的数据类型
switch (cell.getCellType()) {
//单元格类型枚举值为STRING时,将使用Cell接口的getRichStringCellValue()方法读取内容:
//文本格式的内容读取
case STRING:
cell.getRichStringCellValue().getString();
break;
// 数字、日期
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
//日期型以年-月-日格式存储
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
fmt.format(cell.getDateCellValue());
} else {
cell.getNumericCellValue();
}
break;
case BOOLEAN:
cell.getBooleanCellValue();
break;
case FORMULA:
cell.getCellFormula();
break;
default: data.get(Integer.valueOf(i)).add(" ");
}