写点什么

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

  • 2023-08-30
    广东
  • 本文字数:3610 字

    阅读完需:约 12 分钟

场景案例:假设有一个学生信息管理系统,需要从 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<Student> readExcel(String filePath) {List<Student> students = new ArrayList<>();try (FileInputStream fis = new FileInputStream(new File(filePath))) {Workbook workbook = new XSSFWorkbook(fis);Sheet sheet = workbook.getSheetAt(0); // 读取第一个 sheetIterator<Row> 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<Map<String, Object>>


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


// 类名:ExcelDataReader// 函数名:readExcelData// 函数功能:读取 Excel 数据并返回 List<Map<String, Object>>类型的结果// POM 依赖包:// <dependency>// <groupId>org.apache.poi</groupId>// <artifactId>poi</artifactId>// <version>4.1.2</version>// </dependency>// <dependency>// <groupId>org.apache.poi</groupId>// <artifactId>poi-ooxml</artifactId>// <version>4.1.2</version>// </dependency>


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<Map<String, Object>>结果// 调用示例:// File file = new File("data.xlsx");// List<Map<String, Object>> 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<Map<String, Object>>的格式


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


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


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


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


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


FuncGPT(慧函数)现已免费开放,下载链接:https://suo.im/a2pXi


五、总结


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

用户头像

飞算云智官方账号 2021-08-10 加入

想了解更多产品内容,欢迎关注微信公众号:飞算SoFlu软件机器人 免费试用申请:http://feisuanyz.mikecrm.com/9dW4GeZ

评论

发布
暂无评论
Java实现学生信息管理系统读取Excel数据_SoFlu软件机器人_InfoQ写作社区