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文件。这对于开发学生信息管理系统等应用非常重要。同时,对可能出现的异常进行适当的处理也是开发过程中不可或缺的一部分。希望这篇文章能帮助你实现你的项目。

相关文章
|
8月前
|
Java API 开发工具
【Azure Developer】Java代码实现获取Azure 资源的指标数据却报错 "invalid time interval input"
在使用 Java 调用虚拟机 API 获取指标数据时,因本地时区设置非 UTC,导致时间格式解析错误。解决方法是在代码中手动指定时区为 UTC,使用 `ZoneOffset.ofHours(0)` 并结合 `withOffsetSameInstant` 方法进行时区转换,从而避免因时区差异引发的时间格式问题。
371 4
|
9月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
10月前
|
Python
如何根据Excel某列数据为依据分成一个新的工作表
在处理Excel数据时,我们常需要根据列值将数据分到不同的工作表或文件中。本文通过Python和VBA两种方法实现该操作:使用Python的`pandas`库按年级拆分为多个文件,再通过VBA宏按班级生成新的工作表,帮助高效整理复杂数据。
|
9月前
|
数据采集 存储 前端开发
Java爬虫性能优化:多线程抓取JSP动态数据实践
Java爬虫性能优化:多线程抓取JSP动态数据实践
|
10月前
|
数据采集 数据可视化 数据挖掘
用 Excel+Power Query 做电商数据分析:从 “每天加班整理数据” 到 “一键生成报表” 的配置教程
在电商运营中,数据是增长的关键驱动力。然而,传统的手工数据处理方式效率低下,耗费大量时间且易出错。本文介绍如何利用 Excel 中的 Power Query 工具,自动化完成电商数据的采集、清洗与分析,大幅提升数据处理效率。通过某美妆电商的实战案例,详细拆解从多平台数据整合到可视化报表生成的全流程,帮助电商从业者摆脱繁琐操作,聚焦业务增长,实现数据驱动的高效运营。
|
12月前
|
存储 安全 大数据
网安工程师必看!AiPy解决fscan扫描数据整理难题—多种信息快速分拣+Excel结构化存储方案
作为一名安全测试工程师,分析fscan扫描结果曾是繁琐的手动活:从海量日志中提取开放端口、漏洞信息和主机数据,耗时又易错。但现在,借助AiPy开发的GUI解析工具,只需喝杯奶茶的时间,即可将[PORT]、[SERVICE]、[VULN]、[HOST]等关键信息智能分类,并生成三份清晰的Excel报表。告别手动整理,大幅提升效率!在安全行业,工具党正碾压手动党。掌握AiPy,把时间留给真正的攻防实战!官网链接:https://www.aipyaipy.com,解锁更多用法!
|
自然语言处理 Java 关系型数据库
Java|小数据量场景的模糊搜索体验优化
在小数据量场景下,如何优化模糊搜索体验?本文分享一个简单实用的方案,虽然有点“土”,但效果还不错。
328 0
|
8月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
516 16
|
10月前
|
Python
将Excel特定某列数据删除
将Excel特定某列数据删除
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现