• 从Excel的一个工作表中获取第一行(标题行)的单元格内容-代码解释


    1. Map<Integer,String> titles = new HashMap<>();
    2. XSSFRow titleRow = caseSheet.getRow(0);//得到列头
    3. //对列头下标进行循环,获取列头的值
    4. for (int i = 0; i < titleRow.getLastCellNum(); i++) {
    5. //i=0
    6. XSSFCell cell = titleRow.getCell(i);//得到列头单元格
    7. String value = getCellValue(cell).toString();//得到单元格的值
    8. titles.put(i,value);//i=0,得到数组{0,id};i=1,得到数组{1,isValid...}
    9. System.out.println("列头内容"+ value);

    这段Java代码主要是用于从Excel的一个工作表(假设这个工作表叫做caseSheet)中获取第一行(标题行)的单元格内容,并将这些内容与它们在行中的位置索引(从0开始)作为键值对存储在一个HashMap中。

    下面是代码的逐行解释:

    1. Map titles = new HashMap<>();

      • 这行代码创建了一个新的HashMap对象,其键的类型是Integer(代表列的索引),值的类型是String(代表从Excel单元格中获取的文本值)。
    2. XSSFRow titleRow = caseSheet.getRow(0);

      • 这行代码从caseSheet工作表中获取第一行(索引为0),并将其存储在titleRow变量中。XSSFRow是Apache POI库中用于表示Excel行的一个类。
    3. for (int i = 0; i < titleRow.getLastCellNum(); i++) {

      • 这是一个for循环,用于遍历titleRow中的所有单元格。getLastCellNum()方法返回行中最后一个单元格的索引(加1,因为索引是从0开始的),因此循环将从0开始,直到最后一个单元格的索引。
    4. XSSFCell cell = titleRow.getCell(i);

      • 这行代码获取titleRow中索引为i的单元格,并将其存储在cell变量中。XSSFCell是Apache POI库中用于表示Excel单元格的一个类。
    5. String value = getCellValue(cell).toString();

      • 这行代码调用getCellValue()方法(该方法没有在提供的代码段中定义,但我们可以假设它用于获取单元格的值)来获取cell的值,并将其转换为String类型。
    6. titles.put(i,value);

      • 这行代码将单元格的值(作为字符串)和它在行中的索引(作为整数)作为键值对添加到titlesHashMap中。
    7. System.out.println("列头内容: " + value);

      • 这行代码打印出“列头内容: ”(字面意思为“Header content: ”),后面跟着从当前单元格获取的文本值。这可以用于在控制台上查看从Excel单元格中提取的数据。

    综上所述,该代码的主要目的是从Excel工作表的第一行中提取单元格内容,并将这些内容与它们在行中的位置索引作为键值对存储在一个HashMap中。同时,它还打印出每个单元格的内容,以便在控制台上查看。

     

    1. for (int i = 1; i <= caseSheet.getLastRowNum(); i++) {
    2. XSSFRow row = caseSheet.getRow(i);
    3. CaseInfo caseInfo = new CaseInfo();
    4. //基于行遍历每个单元格,因单元格类型有多种需进行判断
    5. for (int j = 0; j < row.getLastCellNum(); j++) {
    6. XSSFCell cell = row.getCell(j);
    7. //返回结果是22个单元格的值,二维数组{0=id,1=isValid...10=isDbCheck}
    8. Object value = getCellValue(cell);
    9. String title = titles.get(j);
    10. Field field= caseInfo.getClass().getDeclaredField(title);//找到类的属性,
    11. field.setAccessible(true);//给私有属性开通权限
    12. field.set(caseInfo,value);//强制给属性赋值,得到{0=id,1=isValid...10=isDbCheck}
    13. //第1个员工: caseInfo{id=1,isValid=YES...}
    14. //第2个员工: caseInfo{id=2,isValid=YES...}
    15. }
    16. System.out.println("每行员工,每个用例的内容" + caseInfo );

    这段代码继续了之前的逻辑,现在它遍历Excel工作表中的每一行(从第二行开始,因为第一行被认为是标题行),并为每一行创建一个CaseInfo对象,然后将该行中的单元格值赋给CaseInfo对象的相应属性。以下是代码的逐行解释:

    1. for (int i = 1; i <= caseSheet.getLastRowNum(); i++) {

      • 这行代码开始了一个循环,从第二行(索引为1)开始,遍历到工作表中的最后一行。getLastRowNum()方法返回工作表中的最后一行的索引(也是加1的)。
    2. XSSFRow row = caseSheet.getRow(i);

      • 获取当前循环中的行(第i行),并将其存储在row变量中。
    3. CaseInfo caseInfo = new CaseInfo();

      • 为当前行创建一个新的CaseInfo对象。我们可以假设CaseInfo是一个自定义的Java类,用于存储单个“用例”或“员工”的信息。
    4. for (int j = 0; j < row.getLastCellNum(); j++) {

      • 开始一个内部循环,遍历当前行中的所有单元格。
    5. XSSFCell cell = row.getCell(j);

      • 获取当前行中索引为j的单元格,并将其存储在cell变量中。
    6. Object value = getCellValue(cell);

      • 调用getCellValue()方法(同样,这个方法在提供的代码段中没有定义)来获取单元格的值,并将其存储在value变量中。这里返回的是一个Object类型,因为单元格可能包含不同类型的数据(如字符串、数字、布尔值等)。
    7. String title = titles.get(j);

      • 从之前创建的标题映射titles中获取当前单元格对应的标题(列名),并将其存储在title变量中。
    8. Field field = caseInfo.getClass().getDeclaredField(title);

      • 使用Java的反射API来获取CaseInfo类中名为title的属性字段。getDeclaredField()方法用于获取类中声明的指定名称的字段,包括私有字段。
    9. field.setAccessible(true);

      • 设置字段的访问权限为可访问,这样即使该字段是私有的,我们也可以在后续代码中对其进行读写操作。
    10. field.set(caseInfo, value);

      • 使用反射API将获取到的单元格值(value)设置到caseInfo对象的相应属性字段中。这里使用了set()方法,该方法接受两个参数:要设置值的对象实例和要设置的新值。
    11. System.out.println("每行员工,每个用例的内容" + caseInfo);

      • 在内部循环结束后(即处理完当前行的所有单元格后),打印出当前行的CaseInfo对象的内容。这可以帮助我们验证数据是否正确地被读取和设置到对象中。

    整体而言,这段代码的目的是从Excel工作表中读取数据,并将这些数据映射到Java对象(CaseInfo)中。通过使用反射API,代码能够动态地设置对象的属性,而不需要提前知道这些属性的具体类型和名称。这种方法在处理具有不固定结构的数据(如来自Excel的电子表格数据)时非常有用。

  • 相关阅读:
    Docker容器之间的通信
    C++基础——引用讲解1
    docker openjdk:8-jdk-alpine 修改时区、添加字体
    Android高仿网易云音乐-启动界面实现和动态权限处理
    VS2022 程序打包过程总结
    c语言(看一遍就会操作,小马教一步步教你如何文件操作)
    C++模板基础和STL之string
    手机打开 第三方 “微信、快手、QQ、电话、信息” 等
    CSS3 就可以写出一个苹果官方渐变颜色文字效果,真的太逼真了!
    系统架构师--数据库系统
  • 原文地址:https://blog.csdn.net/weixin_51482243/article/details/136656549