如何使用 Java 灵活读取 Excel 内容?

这篇具有很好参考价值的文章主要介绍了如何使用 Java 灵活读取 Excel 内容?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在日常工作和学习中,我们经常需要从 Excel 文件中读取数据。对于少量数据,手动复制和粘贴可能是可行的,但是对于大量的数据,这种方法会变得非常低效。在这种情况下,使用 Java 程序自动读取 Excel 文件中的数据将是更好的选择。

本教程将介绍如何使用 Java 程序读取 Excel 文件中的数据,包括以下几个方面:

  1. 了解 Excel 文件格式
  2. 选择 Java 的 Excel 文件读取库
  3. 读取 Excel 文件中的数据
  4. 处理 Excel 文件中的不同数据类型
  5. 使用 Java 程序导出 Excel 文件

让我们开始吧!


1、了解 Excel 文件格式

在开始编写 Java 程序读取 Excel 文件之前,我们需要了解 Excel 文件格式。Excel 文件是基于 Microsoft 的 OLE2 格式的,这个格式将文件组织成一系列的 "容器" 和 "对象"。Excel 文件的主要容器是 Workbook,它包含一个或多个 Sheet。每个 Sheet 包含一组行和列,这些行和列组成了一个二维的单元格数组。每个单元格可以包含文本、数字、日期、布尔值等不同的数据类型。

2、选择 Java 的 Excel 文件读取库

在 Java 中,有多个库可以用于读取 Excel 文件。这些库包括 Apache POI、JExcelApi、EasyXLS、JXL 等。在本教程中,我们将使用 Apache POI 库。

Apache POI 是一个 Java API,用于操作 Microsoft 文档格式,包括 Word、Excel 和 PowerPoint。它提供了一组 Java 类,可以用于创建、读取和修改 Microsoft 文档。

3、读取 Excel 文件中的数据

在本节中,我们将演示如何使用 Apache POI 库读取 Excel 文件中的数据。

在开始之前,我们需要将 Apache POI 库添加到项目的依赖中。您可以通过 Maven 或 Gradle 等构建工具将它们添加到项目中。

以下是 Maven 项目的 pom.xml 文件中添加 Apache POI 库的示例代码:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>

以下是 Gradle 项目的 build.gradle 文件中添加 Apache POI 库的示例代码:

dependencies {
    implementation 'org.apache.poi:poi:4.1.2'
}

接下来,我们将演示如何使用 Apache POI 库读取 Excel 文件中的数据。

首先,我们需要创建一个 Workbook 对象,该对象表示整个 Excel 文件。在 Apache POI 中,Workbook 对象有三种不同的类型:HSSFWorkbook 表示一个 .xls 文件,XSSFWorkbook 表示一个 .xlsx 文件,SXSSFWorkbook 表示一个大型 .xlsx 文件。我们可以使用 WorkbookFactory.create() 方法根据文件的类型创建一个 Workbook 对象。以下是创建一个 XSSFWorkbook 对象的示例代码:

FileInputStream file = new FileInputStream(new File("path/to/excel/file.xlsx"));
Workbook workbook = WorkbookFactory.create(file);

接下来,我们可以获取一个 Sheet 对象,该对象表示 Excel 文件中的一个工作表。在 Apache POI 中,Sheet 对象由 Workbook 对象的 getSheet() 方法返回。以下是获取名为 "Sheet1" 的 Sheet 对象的示例代码:

Sheet sheet = workbook.getSheet("Sheet1");

一旦我们获取了 Sheet 对象,我们就可以遍历其中的每一行和每一列,以读取其中的单元格数据。以下是遍历 Sheet 对象中的所有单元格并输出单元格值的示例代码:

Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
    Row row = rowIterator.next();
    Iterator<Cell> cellIterator = row.cellIterator();
    while (cellIterator.hasNext()) {
        Cell cell = cellIterator.next();
        switch (cell.getCellType()) {
            case STRING:
                System.out.print(cell.getStringCellValue() + "\t");
                break;
            case NUMERIC:
                System.out.print(cell.getNumericCellValue() + "\t");
                break;
            case BOOLEAN:
                System.out.print(cell.getBooleanCellValue() + "\t");
                break;
            default:
                System.out.print("\t");
        }
    }
    System.out.println();
}

上述代码中,我们使用了一个嵌套的迭代器来遍历每一行和每一列。在每个单元格中,我们使用 switch 语句根据不同的数据类型执行不同的操作。

4、处理 Excel 文件中的不同数据类型

在 Excel 文件中,单元格可以包含不同的数据类型,包括字符串、数字、日期和布尔值等。当我们读取单元格中的数据时,我们需要知道单元格中的数据类型,以正确地处理它们。

在 Apache POI 中,我们可以使用 Cell.getCellType() 方法获取单元格的数据类型。该方法返回 CellType 枚举类型的值,可以使用 switch 语句根据不同的枚举值执行不同的操作。

以下是使用 switch 语句处理不同数据类型的示例代码:

switch (cell.getCellType()) {
    case STRING:
        System.out.print(cell.getStringCellValue() + "\t");
        break;
    case NUMERIC:
        if (DateUtil.isCellDateFormatted(cell)) {
            System.out.print(cell.getDateCellValue() + "\t");
        } else {
            System.out.print(cell.getNumericCellValue() + "\t");
        }
        break;
    case BOOLEAN:
        System.out.print(cell.getBooleanCellValue() + "\t");
        break;
    default:
        System.out.print("\t");
}

在上述示例代码中,我们首先检查单元格的数据类型是否为字符串。如果是字符串,我们使用 getStringCellValue() 方法获取字符串值。如果单元格的数据类型为数字,我们还需要检查单元格是否包含日期。如果是日期,我们使用 getDateCellValue() 方法获取日期值,否则我们使用 getNumericCellValue() 方法获取数字值。

5、使用 Java 程序导出 Excel 文件

除了读取 Excel 文件中的数据外,我们还可以使用 Java 程序创建和导出 Excel 文件。Apache POI 提供了 HSSFWorkbook 和 XSSFWorkbook 两个类,用于创建和操作 Excel 文件。

HSSFWorkbook 类用于操作旧版的 .xls 格式的 Excel 文件,而 XSSFWorkbook 类用于操作新版的 .xlsx 格式的 Excel 文件。我们可以根据需要选择合适的类来创建和导出 Excel 文件。

以下是创建和导出 Excel 文件的一般步骤:

  1. 创建一个 Workbook 对象,表示整个 Excel 文件。
  2. 创建一个 Sheet 对象,表示 Excel 文件中的一个工作表。
  3. 创建 Row 和 Cell 对象,表示 Excel 文件中的行和列。
  4. 为每个单元格设置数据和样式。
  5. 将 Workbook 对象写入文件或输出流中。

下面,让我们来看一些示例代码,演示如何使用 Java 程序创建和导出 Excel 文件。

  1. 创建一个 XSSFWorkbook 对象

以下是创建一个 XSSFWorkbook 对象的示例代码:

Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet1");
  1. 创建行和单元格

以下是创建行和单元格的示例代码:

Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("Hello, World!");
  1. 设置单元格样式

在 Excel 文件中,我们可以为单元格设置不同的样式,包括字体、颜色、对齐方式等。以下是设置单元格样式的示例代码:

CellStyle style = workbook.createCellStyle();
Font font = workbook.createFont();
font.setBold(true);
style.setFont(font);
cell.setCellStyle(style);

在上述示例代码中,我们首先使用 createCellStyle() 方法创建一个单元格样式对象。然后,我们使用 createFont() 方法创建一个字体对象,并设置其属性。最后,我们将样式应用于单元格。

  1. 导出 Excel 文件

导出 Excel 文件时,我们可以将 Workbook 对象写入文件或输出流中。以下是将 Workbook 对象写入文件的示例代码:

FileOutputStream fileOut = new FileOutputStream("path/to/excel/file.xlsx");
workbook.write(fileOut);
fileOut.close();

在上述示例代码中,我们首先使用 FileOutputStream 类创建一个文件输出流对象。然后,我们使用 write() 方法将 Workbook 对象写入文件中。最后,我们关闭文件输出流。

除了写入文件,我们还可以将 Workbook 对象输出到网络流中,以便在浏览器中下载 Excel 文件。以下是将 Workbook 对象输出到网络流中的示例代码:

response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=\"excel_file.xlsx\"");
OutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.close();

在上述示例代码中,我们首先设置 HTTP 响应的内容类型和文件名。然后,我们使用 getOutputStream() 方法获取网络输出流对象。最后,我们使用 write() 方法将 Workbook 对象写入网络流中,并关闭输出流。

完整示例代码

下面是一个完整的示例代码,演示如何使用 Java 程序读取和导出 Excel 文件:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelUtils {

    public static void readExcel(String fileName) throws IOException {
        // 创建文件输入流
        FileInputStream fileInputStream = new FileInputStream(new File(fileName));

        // 创建工作簿对象
        Workbook workbook = WorkbookFactory.create(fileInputStream);

        // 获取第一个工作表
        Sheet sheet = workbook.getSheetAt(0);

        // 遍历工作表中的所有行和单元格
        for (Row row : sheet) {
            for (Cell cell : row) {
                // 根据单元格的类型读取数据
                switch (cell.getCellType()) {
                    case STRING:
                        System.out.print(cell.getStringCellValue() + "\t");
                        break;
                    case NUMERIC:
                        System.out.print(cell.getNumericCellValue() + "\t");
                        break;
                    case BOOLEAN:
                        System.out.print(cell.getBooleanCellValue() + "\t");
                        break;
                    case FORMULA:
                        System.out.print(cell.getCellFormula() + "\t");
                        break;
                    case BLANK:
                        System.out.print("\t");
                        break;
                    default:
                        System.out.print("\t");
                }
            }
            System.out.println();
        }

        // 关闭文件输入流
        fileInputStream.close();
    }

    public static void writeExcel(String fileName) throws IOException {
        // 创建工作簿对象
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Sheet1");

        // 创建行和单元格
        Row row = sheet.createRow(0);
        Cell cell = row.createCell(0);
        cell.setCellValue("Hello, World!");

        // 设置单元格样式
        CellStyle style = workbook.createCellStyle();
        Font font = workbook.createFont();
        font.setBold(true);
        style.setFont(font);
        cell.setCellStyle(style);

        // 导出 Excel 文件
        FileOutputStream fileOut = new FileOutputStream(fileName);
        workbook.write(fileOut);
        fileOut.close();
    }
}

使用该类,我们可以方便地读取和导出 Excel 文件,如下所示:

public static void main(String[] args) throws IOException {
    String fileName = "path/to/excel/file.xlsx";

    // 读取 Excel 文件
    ExcelUtils.readExcel(fileName);

    // 导出 Excel 文件
    ExcelUtils.writeExcel(fileName);
}

6、结论

本文介绍了如何使用 Java 程序灵活读取和导出 Excel 文件。我们首先介绍了 Apache POI 库,它是 Java 操作 Office 文档的一个强大的工具。然后,我们演示了如何使用 POI 库读取 Excel 文件,并解释了如何根据单元如何设置单元格样式。最后,我们提供了一个完整的示例代码,演示了如何使用 ExcelUtils 类来读取和导出 Excel 文件。

Java 程序读取和导出 Excel 文件是一项非常实用的技能,尤其是在需要处理大量数据的项目中。使用 Apache POI 库,我们可以方便地读取和写入 Excel 文件,这可以大大提高我们的工作效率。

在实际应用中,我们需要根据具体的需求来选择读取和写入 Excel 文件的方法,以达到最好的效果。

参考文献

  • Apache POI 官方文档. (​​https://poi.apache.org/​​)

文章来源地址https://www.toymoban.com/news/detail-725545.html

到了这里,关于如何使用 Java 灵活读取 Excel 内容?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java中灵活获取excel中的数据

    在java当中获取excel数据,获取每一列数据、每一行数据 在这里例子是将每一行数据获取出来,并带着表头数据返回。 代码: 具体实现逻辑在代码注释当中可以参见。 excel例子: 代码执行:   将执行结果格式化一下,更直观。  我们只要能获取 行列 数据,在就可以根据自

    2024年02月15日
    浏览(62)
  • 使用java解析和读取excel表格(EasyExcel的简单使用)

    ** ** Apache POI、JXL、Alibaba EasyExcel等。其中Apache POI基于DOM方式进行解析,将文件直接加载内存,所以速度较快,适合Excel文件数据量不大的应用场景; EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。他能让你在不用考虑性能、内存的等因素的情况下

    2024年01月16日
    浏览(48)
  • Python-使用openpyxl读取excel内容

    将下面的excel中的寄存器表单读入并构建一个字典 wb.sheetnames 会返回一个列表,列表中是每个工作表的名称,数据类型为str。执行上述代码后ws就是获取的工作表。 使用sheet.cell会返回cell对象,再使用cell.value才能返回单元格的值,执行上述代码的结果如下: 按行读取可以用

    2024年03月12日
    浏览(63)
  • Java 读取excel文件

    先导入依赖: 1、获取想要上传excel文件的路径 2、获得路径后,通过路径定位生成数据流,使用FileInputStream方法读取路径对应文件的原始字节流。 3、使用ExcelUtils工具类读取 字节流 + 路径。 4、ExcelUtils工具类对数据进行处理,因为表格有行和列,所以处理完数据使用二维集合

    2024年02月04日
    浏览(49)
  • java读取excel中的数据

    首先导入相关的依赖: 测试代码: 数据打印到控制台的效果:

    2024年02月06日
    浏览(41)
  • java读取Excel导入去除空行

    问题: 在Java读取Excel导入操作时, sheet.getLastRowNum()会统计带有格式的空白行,导致获取的最大行数不准确,数据导入失败。 解决: 在操作过程中删除存在样式的空白行 可通过将空白行(内容为空,但是存在样式)进行sheet.removeRow删除后 再调用getLastRowNum()进行行数统计,getAcc

    2024年02月15日
    浏览(43)
  • JAVA 读取jar包中excel模板

    1、在resources路径下,新建report文件夹,放入excel模板 2、配置文件中的目录,分隔符使用 / 3、使用getResourceAsStream()读取

    2024年02月11日
    浏览(38)
  • Java EasyExcel高效读取保存excel文件

    阿里开源出一款易上手,且比较节省内存的Excel操作框架:EasyExcel。EasyExcel是一行一行进行读取,再大的excel也不会出现OOM。 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存

    2024年02月16日
    浏览(50)
  • java 读取excel图片导入(亲测有效)

    从excel文件中获取图片(兼容新老版本) 从sheet页中获取图片及图片位置 main方法-获取excel文件中的图片下载到本地 遇到问题 :图片导入解析报错异常java.lang.ClassCastException: org.apache.poi.xssf.usermodel. XSSFSimpleShape cannot be cast to org.apache.poi.xssf.usermodel.XSSFPicture问题 解决方法 :经过排

    2024年02月12日
    浏览(52)
  • [excel与dict] python 读取excel内容并放入字典、将字典内容写入 excel文件

    一 读取excel内容、并放入字典 1 读取excel文件 2 读取value,舍弃行号 3 读取为字典 一 读取excel内容、并放入字典(完整代码) 二、将字典内容写入 excel文件 1 假设已有字典内容为: 即student列表里有4个字典, 第一个字典里面有3对key-value \\\"num\\\": 1, \\\"name\\\": \\\"cod1\\\", \\\"wfm\\\": 0.1 2 导入Workb

    2024年02月04日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包