Java实现学生信息管理系统读取Excel数据

简介: 场景案例:假设有一个学生信息管理系统,需要从Excel文件中读取学生的姓名、年龄、成绩等数据,并将这些数据存储到系统中进行进一步的处理和管理。

场景案例:
假设有一个学生信息管理系统,需要从Excel文件中读取学生的姓名、年龄、成绩等数据,并将这些数据存储到系统中进行进一步的处理和管理。

具体来说,在数据导入/导出系统中调用这个函数,并传入Excel文件作为参数,就可以得到包含学生信息的结果。然后,可以对这个结果进行进一步的处理,比如将学生数据存储到数据库中或进行其他业务逻辑操作。

在Java开发的学生信息管理系统中,读取Excel数据是一个常见的需求。Excel文件常常被用作学生信息的输入源,因此,了解如何使用Java读取Excel数据对于开发人员来说是一项必备技能。本文将详细介绍如何使用Java读取Excel文件,并对异常情况做出处理。

一、环境准备

在开始之前,请确保你已经安装了Java开发环境,并了解基本的Java语法。为了处理Excel文件,我们将使用Apache POI库,它是一个流行的Java库,专门用于处理Microsoft Office文件。如果你还没有安装Apache POI,你可以通过Maven或Gradle将其添加到你的项目中。

二、代码实现

首先,我们需要导入必要的库。在Java中,这通常是通过import语句完成的。然后,我们将创建一个类并定义一个方法来读取Excel文件。

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;

接下来,我们定义一个名为readExcel的方法,该方法接受一个文件路径作为参数,并返回一个包含所有学生信息的列表。

public List readExcel(String filePath) {
List students = new ArrayList<>();
try (FileInputStream fis = new FileInputStream(new File(filePath))) {
Workbook workbook = new XSSFWorkbook(fis);
Sheet sheet = workbook.getSheetAt(0); // 读取第一个sheet
Iterator rowIterator = sheet.iterator(); // 创建一个行迭代器
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Cell cell = row.getCell(0); // 获取第一列的单元格
String studentName = cell.getStringCellValue();
students.add(new Student(studentName));
}
} catch (IOException e) {
e.printStackTrace();
}
return students;
}
这个方法首先打开指定的Excel文件,然后读取第一个sheet中的每一行。对于每一行,它获取第一列的单元格,并从中获取学生名。然后,它将这个学生名添加到学生列表中。如果在读取文件或处理数据时发生错误,它将打印错误堆栈跟踪。

三、异常处理

在处理文件和数据时,可能会发生多种错误。例如,文件可能不存在,或者文件可能不是Excel文件。此外,单元格可能不包含我们期望的数据。为了处理这些情况,你应该添加更多的错误检查和处理代码。例如:

1、 检查文件是否存在:在打开文件之前,可以检查文件是否存在。如果文件不存在,你可以抛出一个异常或返回一个错误消息。

2、 检查文件是否是Excel文件:在打开文件之前,可以尝试读取文件的几个字节,并检查它们是否是Excel文件的签名(例如,"Poi"对于POI库)。如果不是,你可以抛出一个异常或返回一个错误消息。

3、 检查单元格的数据类型:如果单元格不包含字符串,那么getStringCellValue方法将抛出一个RuntimeException。你可以使用getCellType方法检查单元格的数据类型,并根据需要处理数据。

4、处理空行:如果sheet中有一行是空的,那么rowIterator.hasNext()将返回false,导致我们停止处理数据。你可以添加一个检查来确保每一行都包含数据。

四、FuncGPT(慧函数)实操

不同的定制化的数据处理需求场景可能有细微的细节差异,按照以上教程从头开始写又太繁琐,这时候开发人员可以想好大致的需求,通过询问FuncGPT(慧函数),依然可以通过使用Apache POI库快速实现Excel文件的读取。

输入需求:
读取EXCEL数据,入参: File file,出参:List>

点击生成代码获得完整的代码。

// 类名:ExcelDataReader
// 函数名:readExcelData
// 函数功能:读取Excel数据并返回List>类型的结果
// POM依赖包:
//
// org.apache.poi
// poi
// 4.1.2
//
//
// org.apache.poi
// poi-ooxml
// 4.1.2
//

import org.apache.poi.ss.usermodel.*;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ExcelDataReader {
/**

 * 读取Excel数据并返回List<Map<String, Object>>类型的结果
 * @param file Excel文件
 * @return Excel数据的List<Map<String, Object>>结果
 * @throws IOException 当读取Excel文件出现错误时抛出IOException
 */
public static List<Map<String, Object>> readExcelData(File file) throws IOException {
    List<Map<String, Object>> dataList = new ArrayList<>(); // 创建存储Excel数据的List

    FileInputStream fis = new FileInputStream(file); // 创建文件输入流
    Workbook workbook = WorkbookFactory.create(fis); // 创建Workbook对象

    Sheet sheet = workbook.getSheetAt(0); // 获取第一个Sheet
    int rowCount = sheet.getLastRowNum(); // 获取行数

    Row headerRow = sheet.getRow(0); // 获取标题行
    int columnCount = headerRow.getLastCellNum(); // 获取列数

    for (int i = 1; i <= rowCount; i++) { // 遍历每一行(跳过标题行)
        Row row = sheet.getRow(i);
        Map<String, Object> rowData = new HashMap<>();

        for (int j = 0; j < columnCount; j++) { // 遍历每一列
            Cell cell = row.getCell(j);
            String columnName = headerRow.getCell(j).getStringCellValue(); // 获取列名

            Object cellValue;
            switch (cell.getCellType()) { // 根据单元格类型获取单元格值
                case STRING:
                    cellValue = cell.getStringCellValue();
                    break;
                case NUMERIC:
                    cellValue = cell.getNumericCellValue();
                    break;
                case BOOLEAN:
                    cellValue = cell.getBooleanCellValue();
                    break;
                case FORMULA:
                    cellValue = cell.getCellFormula();
                    break;
                default:
                    cellValue = null;
            }

            rowData.put(columnName, cellValue); // 将列名和单元格值存入rowData
        }

        dataList.add(rowData); // 将rowData存入dataList
    }

    workbook.close(); // 关闭Workbook对象
    fis.close(); // 关闭文件输入流

    return dataList; // 返回Excel数据的结果
}

}

// 函数示例
// 读取Excel数据示例
// 入参:file,Excel文件
// 出参:dataList,Excel数据的List>结果
// 调用示例:
// File file = new File("data.xlsx");
// List> dataList = ExcelDataReader.readExcelData(file);
// System.out.println(dataList);
// 输出结果:例如,Excel数据为:
// | Name | Age | Grade |
// |-------|-----|-------|
// | Alice | 18 | A |
// | Bob | 20 | B |
// 则输出结果为:[{Name=Alice, Age=18, Grade=A}, {Name=Bob, Age=20, Grade=B}]
// 表示Excel数据被封装为List>的格式

FuncGPT(慧函数)就像一个线上的“名师”,可以在短时间内根据你的需求给到一个清晰易懂,可读性优秀,相对精准的“解决方案”,甚至是拿来即用的代码。而在特定的需求场景下,开发人员可以根据自己的实际需求在FuncGPT(慧函数)生成的代码基础上进行修改。

比如,由于EXCEL整体格式内容的话,会影响读取有效行或者有效列的真实数据,故需要对行和列进行相关有效校验。在原有代码的基础上,可以做以下一些修改:

1)首先判断列,因为列的真实长度会影响到行的读取;

2)读取第一行表头,如果遇到空白列,则认定有效列为上一个列的下标。

3)获取到有效列之后 去遍历每一行数数据,如果有整行为空则跳出循环,结束数据获取。

五、总结

通过以上代码和解释,我们了解了如何使用Java和Apache POI库来读取Excel文件。这对于开发学生信息管理系统等应用非常重要。同时,对可能出现的异常进行适当的处理也是开发过程中不可或缺的一部分。希望这篇文章能帮助你实现你的项目。

相关文章
|
1月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
105 10
|
30天前
|
前端开发 JavaScript Java
java常用数据判空、比较和类型转换
本文介绍了Java开发中常见的数据处理技巧,包括数据判空、数据比较和类型转换。详细讲解了字符串、Integer、对象、List、Map、Set及数组的判空方法,推荐使用工具类如StringUtils、Objects等。同时,讨论了基本数据类型与引用数据类型的比较方法,以及自动类型转换和强制类型转换的规则。最后,提供了数值类型与字符串互相转换的具体示例。
|
2月前
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
148 5
|
6天前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
54 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
4天前
|
存储 Java BI
java怎么统计每个项目下的每个类别的数据
通过本文,我们详细介绍了如何在Java中统计每个项目下的每个类别的数据,包括数据模型设计、数据存储和统计方法。通过定义 `Category`和 `Project`类,并使用 `ProjectManager`类进行管理,可以轻松实现项目和类别的数据统计。希望本文能够帮助您理解和实现类似的统计需求。
40 17
|
9天前
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
|
2月前
|
JSON Java 程序员
Java|如何用一个统一结构接收成员名称不固定的数据
本文介绍了一种 Java 中如何用一个统一结构接收成员名称不固定的数据的方法。
28 3
|
2月前
|
Java BI API
Java Excel报表生成:JXLS库的高效应用
在Java应用开发中,经常需要将数据导出到Excel文件中,以便于数据的分析和共享。JXLS库是一个强大的工具,它基于Apache POI,提供了一种简单而高效的方式来生成Excel报表。本文将详细介绍JXLS库的使用方法和技巧,帮助你快速掌握Java中的Excel导出功能。
74 6
|
2月前
|
Java 程序员 容器
Java中的变量和常量:数据的‘小盒子’和‘铁盒子’有啥不一样?
在Java中,变量是一个可以随时改变的数据容器,类似于一个可以反复打开的小盒子。定义变量时需指定数据类型和名称。例如:`int age = 25;` 表示定义一个整数类型的变量 `age`,初始值为25。 常量则是不可改变的数据容器,类似于一个锁死的铁盒子,定义时使用 `final` 关键字。例如:`final int MAX_SPEED = 120;` 表示定义一个名为 `MAX_SPEED` 的常量,值为120,且不能修改。 变量和常量的主要区别在于变量的数据可以随时修改,而常量的数据一旦确定就不能改变。常量主要用于防止意外修改、提高代码可读性和便于维护。
|
2月前
|
存储 缓存 安全
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见。本文介绍了使用 `File.createTempFile` 方法和自定义创建临时文件的两种方式,详细探讨了它们的使用场景和注意事项,包括数据缓存、文件上传下载和日志记录等。强调了清理临时文件、确保文件名唯一性和合理设置文件权限的重要性。
129 2