jck28-lucio-junit5结合数据驱动-excel

excel解析对比

image

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(" ");
}